mirror of
https://github.com/exyte/ActivityIndicatorView.git
synced 2026-04-07 19:17:39 +00:00
Add project
Add framework and example Update .gitignore Update LICENSE Update LICENSE Update Package.swift Update README.md Rename again Update readme Update readme
This commit is contained in:
+64
-28
@@ -1,18 +1,60 @@
|
||||
# Xcode
|
||||
|
||||
# Created by https://www.gitignore.io/api/swift,macos,carthage,cocoapods
|
||||
# Edit at https://www.gitignore.io/?templates=swift,macos,carthage,cocoapods
|
||||
|
||||
### Carthage ###
|
||||
# Carthage
|
||||
#
|
||||
# Add this line if you want to avoid checking in source code from Carthage dependencies.
|
||||
# Carthage/Checkouts
|
||||
|
||||
Carthage/Build
|
||||
|
||||
### CocoaPods ###
|
||||
## CocoaPods GitIgnore Template
|
||||
|
||||
# CocoaPods - Only use to conserve bandwidth / Save time on Pushing
|
||||
# - Also handy if you have a large number of dependant pods
|
||||
# - AS PER https://guides.cocoapods.org/using/using-cocoapods.html NEVER IGNORE THE LOCK FILE
|
||||
Pods/
|
||||
|
||||
### macOS ###
|
||||
# General
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Icon must end with two \r
|
||||
Icon
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear in the root of a volume
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.VolumeIcon.icns
|
||||
.com.apple.timemachine.donotpresent
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
|
||||
### Swift ###
|
||||
# Xcode
|
||||
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
|
||||
|
||||
## User settings
|
||||
xcuserdata/
|
||||
|
||||
## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
|
||||
*.xcscmblueprint
|
||||
*.xccheckout
|
||||
|
||||
## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
|
||||
## Build generated
|
||||
build/
|
||||
DerivedData/
|
||||
*.moved-aside
|
||||
|
||||
## Various settings
|
||||
*.pbxuser
|
||||
!default.pbxuser
|
||||
*.mode1v3
|
||||
@@ -21,11 +63,15 @@ DerivedData/
|
||||
!default.mode2v3
|
||||
*.perspectivev3
|
||||
!default.perspectivev3
|
||||
xcuserdata/
|
||||
|
||||
## Other
|
||||
*.moved-aside
|
||||
*.xccheckout
|
||||
*.xcscmblueprint
|
||||
|
||||
## Obj-C/Swift specific
|
||||
*.hmap
|
||||
|
||||
## App packaging
|
||||
*.ipa
|
||||
*.dSYM.zip
|
||||
*.dSYM
|
||||
@@ -35,45 +81,34 @@ timeline.xctimeline
|
||||
playground.xcworkspace
|
||||
|
||||
# Swift Package Manager
|
||||
#
|
||||
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
|
||||
# Packages/
|
||||
# Package.pins
|
||||
# Package.resolved
|
||||
# *.xcodeproj
|
||||
#
|
||||
# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
|
||||
# hence it is not needed unless you have added a package configuration file to your project
|
||||
# .swiftpm
|
||||
|
||||
.build/
|
||||
# Add this line if you want to avoid checking in Xcode SPM integration.
|
||||
# .swiftpm/xcode
|
||||
|
||||
# CocoaPods
|
||||
#
|
||||
# We recommend against adding the Pods directory to your .gitignore. However
|
||||
# you should judge for yourself, the pros and cons are mentioned at:
|
||||
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
|
||||
#
|
||||
# Pods/
|
||||
#
|
||||
# Add this line if you want to avoid checking in source code from the Xcode workspace
|
||||
# *.xcworkspace
|
||||
|
||||
# Carthage
|
||||
#
|
||||
# Add this line if you want to avoid checking in source code from Carthage dependencies.
|
||||
# Carthage/Checkouts
|
||||
|
||||
Carthage/Build/
|
||||
|
||||
# Accio dependency management
|
||||
Dependencies/
|
||||
.accio/
|
||||
|
||||
# fastlane
|
||||
#
|
||||
# It is recommended to not store the screenshots in the git repo.
|
||||
# Instead, use fastlane to re-generate the screenshots whenever they are needed.
|
||||
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
|
||||
# screenshots whenever they are needed.
|
||||
# For more information about the recommended setup visit:
|
||||
# https://docs.fastlane.tools/best-practices/source-control/#source-control
|
||||
|
||||
@@ -83,8 +118,9 @@ fastlane/screenshots/**/*.png
|
||||
fastlane/test_output
|
||||
|
||||
# Code Injection
|
||||
#
|
||||
# After new code Injection tools there's a generated folder /iOSInjectionProject
|
||||
# https://github.com/johnno1962/injectionforxcode
|
||||
|
||||
iOSInjectionProject/
|
||||
|
||||
# End of https://www.gitignore.io/api/swift,macos,carthage,cocoapods
|
||||
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
language: swift
|
||||
osx_image: xcode11.3
|
||||
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
|
||||
script:
|
||||
- set -o pipefail && xcodebuild -project ActivityIndicatorView.xcodeproj -scheme 'ActivityIndicatorView' -sdk iphonesimulator13.2 ONLY_ACTIVE_ARCH=NO -destination 'platform=iOS Simulator,OS=13.3,name=iPhone 11 Pro' | xcpretty;
|
||||
|
||||
notifications:
|
||||
slack: exyte:rbHEfGcQnX1drc0KNL0HVudX
|
||||
@@ -0,0 +1,24 @@
|
||||
Pod::Spec.new do |s|
|
||||
s.name = "ActivityIndicatorView"
|
||||
s.version = "0.0.1"
|
||||
s.summary = "A number of preset loading indicators created with SwiftUI."
|
||||
|
||||
s.homepage = 'https://github.com/exyte/ActivityIndicatorView.git'
|
||||
s.license = 'MIT'
|
||||
s.author = { 'exyte' => 'info@exyte.com' }
|
||||
s.source = { :git => 'https://github.com/exyte/ActivityIndicatorView.git', :tag => s.version.to_s }
|
||||
s.social_media_url = 'http://exyte.com'
|
||||
|
||||
s.ios.deployment_target = '13.0'
|
||||
s.osx.deployment_target = '10.15'
|
||||
s.tvos.deployment_target = '13.0'
|
||||
s.watchos.deployment_target = '6.0'
|
||||
|
||||
s.requires_arc = true
|
||||
s.swift_version = '5.1'
|
||||
|
||||
s.source_files = [
|
||||
'Source/*.h',
|
||||
'Source/*.swift'
|
||||
]
|
||||
end
|
||||
@@ -0,0 +1,338 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 50;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
5B56E7DB2428A1D900A5AF97 /* ActivityIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B56E7D82428A1D900A5AF97 /* ActivityIndicatorView.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
5B56E7DC2428A1D900A5AF97 /* ActivityIndicatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B56E7D92428A1D900A5AF97 /* ActivityIndicatorView.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
5B56E7D82428A1D900A5AF97 /* ActivityIndicatorView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ActivityIndicatorView.h; sourceTree = "<group>"; };
|
||||
5B56E7D92428A1D900A5AF97 /* ActivityIndicatorView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActivityIndicatorView.swift; sourceTree = "<group>"; };
|
||||
5B56E7DA2428A1D900A5AF97 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
5BA1FA342424A5CE00EE4184 /* ActivityIndicatorView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ActivityIndicatorView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
5BA1FA312424A5CE00EE4184 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
5B56E7D72428A1D900A5AF97 /* Source */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
5B56E7D82428A1D900A5AF97 /* ActivityIndicatorView.h */,
|
||||
5B56E7D92428A1D900A5AF97 /* ActivityIndicatorView.swift */,
|
||||
5B56E7DA2428A1D900A5AF97 /* Info.plist */,
|
||||
);
|
||||
path = Source;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
5BA1FA2A2424A5CE00EE4184 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
5B56E7D72428A1D900A5AF97 /* Source */,
|
||||
5BA1FA352424A5CE00EE4184 /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
5BA1FA352424A5CE00EE4184 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
5BA1FA342424A5CE00EE4184 /* ActivityIndicatorView.framework */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXHeadersBuildPhase section */
|
||||
5BA1FA2F2424A5CE00EE4184 /* Headers */ = {
|
||||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
5B56E7DB2428A1D900A5AF97 /* ActivityIndicatorView.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXHeadersBuildPhase section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
5BA1FA332424A5CE00EE4184 /* ActivityIndicatorView */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 5BA1FA3C2424A5CE00EE4184 /* Build configuration list for PBXNativeTarget "ActivityIndicatorView" */;
|
||||
buildPhases = (
|
||||
5BA1FA2F2424A5CE00EE4184 /* Headers */,
|
||||
5BA1FA302424A5CE00EE4184 /* Sources */,
|
||||
5BA1FA312424A5CE00EE4184 /* Frameworks */,
|
||||
5BA1FA322424A5CE00EE4184 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = ActivityIndicatorView;
|
||||
productName = SwiftUIActivityIndicator;
|
||||
productReference = 5BA1FA342424A5CE00EE4184 /* ActivityIndicatorView.framework */;
|
||||
productType = "com.apple.product-type.framework";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
5BA1FA2B2424A5CE00EE4184 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 1110;
|
||||
ORGANIZATIONNAME = Exyte;
|
||||
TargetAttributes = {
|
||||
5BA1FA332424A5CE00EE4184 = {
|
||||
CreatedOnToolsVersion = 11.1;
|
||||
LastSwiftMigration = 1110;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 5BA1FA2E2424A5CE00EE4184 /* Build configuration list for PBXProject "ActivityIndicatorView" */;
|
||||
compatibilityVersion = "Xcode 9.3";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = 5BA1FA2A2424A5CE00EE4184;
|
||||
productRefGroup = 5BA1FA352424A5CE00EE4184 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
5BA1FA332424A5CE00EE4184 /* ActivityIndicatorView */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
5BA1FA322424A5CE00EE4184 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
5BA1FA302424A5CE00EE4184 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
5B56E7DC2428A1D900A5AF97 /* ActivityIndicatorView.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
5BA1FA3A2424A5CE00EE4184 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
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_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.1;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
5BA1FA3B2424A5CE00EE4184 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
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_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.1;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
5BA1FA3D2424A5CE00EE4184 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEFINES_MODULE = YES;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
INFOPLIST_FILE = Source/Info.plist;
|
||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = exyte.ActivityIndicatorView;
|
||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
5BA1FA3E2424A5CE00EE4184 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEFINES_MODULE = YES;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
INFOPLIST_FILE = Source/Info.plist;
|
||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = exyte.ActivityIndicatorView;
|
||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
5BA1FA2E2424A5CE00EE4184 /* Build configuration list for PBXProject "ActivityIndicatorView" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
5BA1FA3A2424A5CE00EE4184 /* Debug */,
|
||||
5BA1FA3B2424A5CE00EE4184 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
5BA1FA3C2424A5CE00EE4184 /* Build configuration list for PBXNativeTarget "ActivityIndicatorView" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
5BA1FA3D2424A5CE00EE4184 /* Debug */,
|
||||
5BA1FA3E2424A5CE00EE4184 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 5BA1FA2B2424A5CE00EE4184 /* Project object */;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:/Users/f3dm76/Work/ActivitiyIndicatorView/ActivityIndicatorView.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>ActivityIndicatorView.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict/>
|
||||
</dict>
|
||||
</plist>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1,397 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 51;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
5BA1FA542424AB2800EE4184 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA1FA532424AB2800EE4184 /* AppDelegate.swift */; };
|
||||
5BA1FA562424AB2800EE4184 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA1FA552424AB2800EE4184 /* SceneDelegate.swift */; };
|
||||
5BA1FA582424AB2800EE4184 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA1FA572424AB2800EE4184 /* ContentView.swift */; };
|
||||
5BA1FA602424AB2A00EE4184 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5BA1FA5E2424AB2A00EE4184 /* LaunchScreen.storyboard */; };
|
||||
C558369BF5D0613BDE3E0E89 /* Pods_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4DA9B76060746B2061594AC /* Pods_Example.framework */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
5BA1FA502424AB2800EE4184 /* Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
5BA1FA532424AB2800EE4184 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
5BA1FA552424AB2800EE4184 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
|
||||
5BA1FA572424AB2800EE4184 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
|
||||
5BA1FA5F2424AB2A00EE4184 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||
5BA1FA612424AB2A00EE4184 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
72763C8DB82FBA52FB5857DA /* Pods-Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.debug.xcconfig"; path = "Target Support Files/Pods-Example/Pods-Example.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
916E229A89B671ED7CC031A5 /* Pods-Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.release.xcconfig"; path = "Target Support Files/Pods-Example/Pods-Example.release.xcconfig"; sourceTree = "<group>"; };
|
||||
C4DA9B76060746B2061594AC /* Pods_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
5BA1FA4D2424AB2800EE4184 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
C558369BF5D0613BDE3E0E89 /* Pods_Example.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
5BA1FA472424AB2800EE4184 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
5BA1FA522424AB2800EE4184 /* Example */,
|
||||
5BA1FA512424AB2800EE4184 /* Products */,
|
||||
60B6BD2D0C754FDF6F76A229 /* Pods */,
|
||||
A47097E21D8C80691CC07732 /* Frameworks */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
5BA1FA512424AB2800EE4184 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
5BA1FA502424AB2800EE4184 /* Example.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
5BA1FA522424AB2800EE4184 /* Example */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
5BA1FA532424AB2800EE4184 /* AppDelegate.swift */,
|
||||
5BA1FA552424AB2800EE4184 /* SceneDelegate.swift */,
|
||||
5BA1FA572424AB2800EE4184 /* ContentView.swift */,
|
||||
5BA1FA5E2424AB2A00EE4184 /* LaunchScreen.storyboard */,
|
||||
5BA1FA612424AB2A00EE4184 /* Info.plist */,
|
||||
);
|
||||
path = Example;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
60B6BD2D0C754FDF6F76A229 /* Pods */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
72763C8DB82FBA52FB5857DA /* Pods-Example.debug.xcconfig */,
|
||||
916E229A89B671ED7CC031A5 /* Pods-Example.release.xcconfig */,
|
||||
);
|
||||
path = Pods;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
A47097E21D8C80691CC07732 /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C4DA9B76060746B2061594AC /* Pods_Example.framework */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
5BA1FA4F2424AB2800EE4184 /* Example */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 5BA1FA642424AB2A00EE4184 /* Build configuration list for PBXNativeTarget "Example" */;
|
||||
buildPhases = (
|
||||
A5D7B8EF28EE02D19AFE2DA0 /* [CP] Check Pods Manifest.lock */,
|
||||
5BA1FA4C2424AB2800EE4184 /* Sources */,
|
||||
5BA1FA4D2424AB2800EE4184 /* Frameworks */,
|
||||
5BA1FA4E2424AB2800EE4184 /* Resources */,
|
||||
2AB504D89179224F042F09DA /* [CP] Embed Pods Frameworks */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = Example;
|
||||
productName = Example;
|
||||
productReference = 5BA1FA502424AB2800EE4184 /* Example.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
5BA1FA482424AB2800EE4184 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastSwiftUpdateCheck = 1110;
|
||||
LastUpgradeCheck = 1110;
|
||||
ORGANIZATIONNAME = Exyte;
|
||||
TargetAttributes = {
|
||||
5BA1FA4F2424AB2800EE4184 = {
|
||||
CreatedOnToolsVersion = 11.1;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 5BA1FA4B2424AB2800EE4184 /* Build configuration list for PBXProject "Example" */;
|
||||
compatibilityVersion = "Xcode 9.3";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = 5BA1FA472424AB2800EE4184;
|
||||
productRefGroup = 5BA1FA512424AB2800EE4184 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
5BA1FA4F2424AB2800EE4184 /* Example */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
5BA1FA4E2424AB2800EE4184 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
5BA1FA602424AB2A00EE4184 /* LaunchScreen.storyboard in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
2AB504D89179224F042F09DA /* [CP] Embed Pods Frameworks */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks-${CONFIGURATION}-input-files.xcfilelist",
|
||||
);
|
||||
name = "[CP] Embed Pods Frameworks";
|
||||
outputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks-${CONFIGURATION}-output-files.xcfilelist",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
A5D7B8EF28EE02D19AFE2DA0 /* [CP] Check Pods Manifest.lock */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
||||
"${PODS_ROOT}/Manifest.lock",
|
||||
);
|
||||
name = "[CP] Check Pods Manifest.lock";
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
"$(DERIVED_FILE_DIR)/Pods-Example-checkManifestLockResult.txt",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
5BA1FA4C2424AB2800EE4184 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
5BA1FA542424AB2800EE4184 /* AppDelegate.swift in Sources */,
|
||||
5BA1FA562424AB2800EE4184 /* SceneDelegate.swift in Sources */,
|
||||
5BA1FA582424AB2800EE4184 /* ContentView.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXVariantGroup section */
|
||||
5BA1FA5E2424AB2A00EE4184 /* LaunchScreen.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
5BA1FA5F2424AB2A00EE4184 /* Base */,
|
||||
);
|
||||
name = LaunchScreen.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
5BA1FA622424AB2A00EE4184 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
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_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 = (
|
||||
"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.1;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
5BA1FA632424AB2A00EE4184 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
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_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_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.1;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
5BA1FA652424AB2A00EE4184 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 72763C8DB82FBA52FB5857DA /* Pods-Example.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
INFOPLIST_FILE = Example/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = exyte.Example;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
5BA1FA662424AB2A00EE4184 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 916E229A89B671ED7CC031A5 /* Pods-Example.release.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
INFOPLIST_FILE = Example/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = exyte.Example;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
5BA1FA4B2424AB2800EE4184 /* Build configuration list for PBXProject "Example" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
5BA1FA622424AB2A00EE4184 /* Debug */,
|
||||
5BA1FA632424AB2A00EE4184 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
5BA1FA642424AB2A00EE4184 /* Build configuration list for PBXNativeTarget "Example" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
5BA1FA652424AB2A00EE4184 /* Debug */,
|
||||
5BA1FA662424AB2A00EE4184 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 5BA1FA482424AB2800EE4184 /* Project object */;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:Example.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>Example.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
<key>5BA1FA4F2424AB2800EE4184</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,37 @@
|
||||
//
|
||||
// AppDelegate.swift
|
||||
// Example
|
||||
//
|
||||
// Created by Alisa Mylnikova on 20/03/2020.
|
||||
// Copyright © 2020 Exyte. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
@UIApplicationMain
|
||||
class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
|
||||
|
||||
|
||||
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
||||
// Override point for customization after application launch.
|
||||
return true
|
||||
}
|
||||
|
||||
// MARK: UISceneSession Lifecycle
|
||||
|
||||
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
|
||||
// Called when a new scene session is being created.
|
||||
// Use this method to select a configuration to create the new scene with.
|
||||
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
|
||||
}
|
||||
|
||||
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
|
||||
// Called when the user discards a scene session.
|
||||
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
|
||||
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--View Controller-->
|
||||
<scene sceneID="EHf-IW-A2E">
|
||||
<objects>
|
||||
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
|
||||
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
||||
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
|
||||
</view>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="53" y="375"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
</document>
|
||||
@@ -0,0 +1,77 @@
|
||||
//
|
||||
// ContentView.swift
|
||||
// Example
|
||||
//
|
||||
// Created by Alisa Mylnikova on 20/03/2020.
|
||||
// Copyright © 2020 Exyte. All rights reserved.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import ActivityIndicatorView
|
||||
|
||||
struct ContentView: View {
|
||||
|
||||
@State private var showLoadingIndicator: Bool = true
|
||||
|
||||
var body: some View {
|
||||
AnyView(GeometryReader { (geometry: GeometryProxy) -> AnyView in
|
||||
|
||||
let size = geometry.size.width / 4
|
||||
let spacing: CGFloat = 40.0
|
||||
|
||||
return AnyView(HStack {
|
||||
|
||||
Spacer()
|
||||
|
||||
VStack(spacing: spacing) {
|
||||
Spacer()
|
||||
ActivityIndicatorView(isVisible: self.$showLoadingIndicator, type: .default)
|
||||
.frame(width: size, height: size)
|
||||
.foregroundColor(.red)
|
||||
ActivityIndicatorView(isVisible: self.$showLoadingIndicator, type: .arcs)
|
||||
.frame(width: size, height: size)
|
||||
.foregroundColor(.red)
|
||||
ActivityIndicatorView(isVisible: self.$showLoadingIndicator, type: .rotatingDots)
|
||||
.frame(width: size, height: size)
|
||||
.foregroundColor(.red)
|
||||
ActivityIndicatorView(isVisible: self.$showLoadingIndicator, type: .equalizer)
|
||||
.frame(width: size, height: size)
|
||||
.foregroundColor(.red)
|
||||
ActivityIndicatorView(isVisible: self.$showLoadingIndicator, type: .growingArc)
|
||||
.frame(width: size, height: size)
|
||||
.foregroundColor(.red)
|
||||
Spacer()
|
||||
}
|
||||
|
||||
Spacer()
|
||||
|
||||
VStack(spacing: spacing) {
|
||||
Spacer()
|
||||
ActivityIndicatorView(isVisible: self.$showLoadingIndicator, type: .opacityDots)
|
||||
.frame(width: size, height: size)
|
||||
.foregroundColor(.red)
|
||||
ActivityIndicatorView(isVisible: self.$showLoadingIndicator, type: .scalingDots)
|
||||
.frame(width: size, height: size)
|
||||
.foregroundColor(.red)
|
||||
ActivityIndicatorView(isVisible: self.$showLoadingIndicator, type: .gradient([Color.white, Color.red]))
|
||||
.frame(width: size, height: size)
|
||||
ActivityIndicatorView(isVisible: self.$showLoadingIndicator, type: .growingCircle)
|
||||
.frame(width: size, height: size)
|
||||
.foregroundColor(.red)
|
||||
ActivityIndicatorView(isVisible: self.$showLoadingIndicator, type: .flickeringDots)
|
||||
.frame(width: size, height: size)
|
||||
.foregroundColor(.red)
|
||||
Spacer()
|
||||
}
|
||||
|
||||
Spacer()
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
struct ContentView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
ContentView()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>UIApplicationSceneManifest</key>
|
||||
<dict>
|
||||
<key>UIApplicationSupportsMultipleScenes</key>
|
||||
<false/>
|
||||
<key>UISceneConfigurations</key>
|
||||
<dict>
|
||||
<key>UIWindowSceneSessionRoleApplication</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>UISceneConfigurationName</key>
|
||||
<string>Default Configuration</string>
|
||||
<key>UISceneDelegateClassName</key>
|
||||
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
<array>
|
||||
<string>armv7</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,64 @@
|
||||
//
|
||||
// SceneDelegate.swift
|
||||
// Example
|
||||
//
|
||||
// Created by Alisa Mylnikova on 20/03/2020.
|
||||
// Copyright © 2020 Exyte. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import SwiftUI
|
||||
|
||||
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||
|
||||
var window: UIWindow?
|
||||
|
||||
|
||||
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
|
||||
// Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
|
||||
// If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
|
||||
// This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
|
||||
|
||||
// Create the SwiftUI view that provides the window contents.
|
||||
let contentView = ContentView()
|
||||
|
||||
// Use a UIHostingController as window root view controller.
|
||||
if let windowScene = scene as? UIWindowScene {
|
||||
let window = UIWindow(windowScene: windowScene)
|
||||
window.rootViewController = UIHostingController(rootView: contentView)
|
||||
self.window = window
|
||||
window.makeKeyAndVisible()
|
||||
}
|
||||
}
|
||||
|
||||
func sceneDidDisconnect(_ scene: UIScene) {
|
||||
// Called as the scene is being released by the system.
|
||||
// This occurs shortly after the scene enters the background, or when its session is discarded.
|
||||
// Release any resources associated with this scene that can be re-created the next time the scene connects.
|
||||
// The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead).
|
||||
}
|
||||
|
||||
func sceneDidBecomeActive(_ scene: UIScene) {
|
||||
// Called when the scene has moved from an inactive state to an active state.
|
||||
// Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
|
||||
}
|
||||
|
||||
func sceneWillResignActive(_ scene: UIScene) {
|
||||
// Called when the scene will move from an active state to an inactive state.
|
||||
// This may occur due to temporary interruptions (ex. an incoming phone call).
|
||||
}
|
||||
|
||||
func sceneWillEnterForeground(_ scene: UIScene) {
|
||||
// Called as the scene transitions from the background to the foreground.
|
||||
// Use this method to undo the changes made on entering the background.
|
||||
}
|
||||
|
||||
func sceneDidEnterBackground(_ scene: UIScene) {
|
||||
// Called as the scene transitions from the foreground to the background.
|
||||
// Use this method to save data, release shared resources, and store enough scene-specific state information
|
||||
// to restore the scene back to its current state.
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
# Uncomment the next line to define a global platform for your project
|
||||
platform :ios, '13.0'
|
||||
|
||||
target 'Example' do
|
||||
# Comment the next line if you don't want to use dynamic frameworks
|
||||
use_frameworks!
|
||||
|
||||
pod 'ActivityIndicatorView', :path => '../'
|
||||
|
||||
end
|
||||
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020 Exyte
|
||||
Copyright (c) 2020 exyte <info@exyte.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -9,13 +9,13 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
// swift-tools-version:5.1
|
||||
|
||||
import PackageDescription
|
||||
|
||||
let package = Package(
|
||||
name: "ActivityIndicatorView",
|
||||
platforms: [
|
||||
.macOS(.v10_15),
|
||||
.iOS(.v13),
|
||||
.watchOS(.v6)
|
||||
],
|
||||
products: [
|
||||
.library(
|
||||
name: "ActivityIndicatorView",
|
||||
targets: ["ActivityIndicatorView"]
|
||||
)
|
||||
],
|
||||
targets: [
|
||||
.target(
|
||||
name: "ActivityIndicatorView",
|
||||
path: "Source"
|
||||
)
|
||||
],
|
||||
swiftLanguageVersions: [.v5]
|
||||
)
|
||||
@@ -0,0 +1,88 @@
|
||||
<img src="https://github.com/exyte/ActivityIndicatorView/blob/master/Assets/header.png">
|
||||
<img align="right" src="https://raw.githubusercontent.com/exyte/ActivityIndicatorView/master/Assets/demo.gif" width="480" />
|
||||
|
||||
<p><h1 align="left">ActivityIndicatorView</h1></p>
|
||||
|
||||
<p><h4>A number of preset loading indicators created with SwiftUI.</h4></p>
|
||||
|
||||
___
|
||||
|
||||
<p> We are a development agency building
|
||||
<a href="https://clutch.co/profile/exyte#review-731233">phenomenal</a> apps.</p>
|
||||
|
||||
</br>
|
||||
|
||||
<a href="https://exyte.com/contacts"><img src="https://i.imgur.com/vGjsQPt.png" width="134" height="34"></a> <a href="https://twitter.com/exyteHQ"><img src="https://i.imgur.com/DngwSn1.png" width="165" height="34"></a>
|
||||
|
||||
</br></br>
|
||||
[](https://travis-ci.org/exyte/ActivitiyIndicatorView)
|
||||
[](http://cocoapods.org/pods/ActivitiyIndicatorView)
|
||||
[](https://github.com/Carthage/Carthage)
|
||||
[](http://cocoapods.org/pods/ActivitiyIndicatorView)
|
||||
[](http://cocoapods.org/pods/ActivitiyIndicatorView)
|
||||
[](http://twitter.com/exyteHQ)
|
||||
|
||||
# Usage
|
||||
|
||||
Create an indicator like this:
|
||||
```swift
|
||||
ActivityIndicator(isVisible: $showLoadingIndicator, type: .default)
|
||||
```
|
||||
where
|
||||
`showLoadingIndicator` - bool value you may change to display or hide the indicator
|
||||
`type` - value from `ActivityIndicator.IndicatorType` enum
|
||||
|
||||
You may alter it with standard SwiftUI means like this:
|
||||
```swift
|
||||
ActivityIndicator(isVisible: $showLoadingIndicator, type: .default)
|
||||
.frame(width: 50.0, height: 50.0)
|
||||
.foregroundColor(.red)
|
||||
```
|
||||
|
||||
### Indicator types
|
||||
`default` - iOS UIActivityIndicator style
|
||||
`arcs`
|
||||
`rotatingDots`
|
||||
`flickeringDots`
|
||||
`scalingDots`
|
||||
`opacityDots`
|
||||
`equalizer`
|
||||
`growingArc`
|
||||
`growingCircle`
|
||||
`gradient` - circle with angular gradient border stroke, pass colors ilke this:
|
||||
```swift
|
||||
ActivityIndicatorView(isVisible: $showLoadingIndicator, type: .gradient([.white, .red]))
|
||||
.frame(width: 50.0, height: 50.0)
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
To try out the ActivityIndicatorView examples:
|
||||
- Clone the repo `git clone git@github.com:exyte/ActivityIndicatorView.git`
|
||||
- Open terminal and run `cd <ActivityIndicatorViewRepo>/Example`
|
||||
- Run `pod install` to install all dependencies
|
||||
- Run `xed .` to open project in the Xcode
|
||||
- Try it!
|
||||
|
||||
## Installation
|
||||
|
||||
### CocoaPods
|
||||
|
||||
```ruby
|
||||
pod 'ActivityIndicatorView'
|
||||
```
|
||||
|
||||
### Carthage
|
||||
|
||||
```ogdl
|
||||
github "Exyte/ActivityIndicatorView"
|
||||
```
|
||||
|
||||
### Manually
|
||||
|
||||
Drop [ActivityIndicatorView.swift](https://github.com/exyte/ActivitiyIndicatorView/blob/master/Source/ActivitiyIndicatorView.swift) into your project.
|
||||
|
||||
## Requirements
|
||||
|
||||
* iOS 13+ / watchOS 13+ / tvOS 13+ / macOS 10.15+
|
||||
* Xcode 11+
|
||||
@@ -0,0 +1,19 @@
|
||||
//
|
||||
// ActivityIndicatorView.h
|
||||
// ActivityIndicatorView
|
||||
//
|
||||
// Created by Alisa Mylnikova on 20/03/2020.
|
||||
// Copyright © 2020 Exyte. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
//! Project version number for ActivityIndicatorView.
|
||||
FOUNDATION_EXPORT double ActivityIndicatorViewVersionNumber;
|
||||
|
||||
//! Project version string for ActivityIndicatorView.
|
||||
FOUNDATION_EXPORT const unsigned char ActivityIndicatorViewVersionString[];
|
||||
|
||||
// In this header, you should import all the public headers of your framework using statements like #import <ActivitiyIndicatorView/PublicHeader.h>
|
||||
|
||||
|
||||
@@ -0,0 +1,324 @@
|
||||
//
|
||||
// ActivityIndicatorView.swift
|
||||
// ActivityIndicatorView
|
||||
//
|
||||
// Created by Alisa Mylnikova on 20/03/2020.
|
||||
// Copyright © 2020 Exyte. All rights reserved.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
public struct ActivityIndicatorView: View {
|
||||
|
||||
public enum IndicatorType {
|
||||
case `default`
|
||||
case arcs
|
||||
case rotatingDots
|
||||
case flickeringDots
|
||||
case scalingDots
|
||||
case opacityDots
|
||||
case equalizer
|
||||
case growingArc
|
||||
case growingCircle
|
||||
case gradient([Color])
|
||||
}
|
||||
|
||||
@Binding var isVisible: Bool
|
||||
var type: IndicatorType
|
||||
|
||||
@State private var isAnimating: Bool = false
|
||||
@State private var parameter = 0.0
|
||||
|
||||
public init(isVisible: Binding<Bool>, type: IndicatorType) {
|
||||
self._isVisible = isVisible
|
||||
self.type = type
|
||||
}
|
||||
|
||||
public var body: some View {
|
||||
|
||||
let indicator: AnyView
|
||||
switch type {
|
||||
case .default:
|
||||
indicator = createDefaultIndicator()
|
||||
case .arcs:
|
||||
indicator = createArcsIndicator()
|
||||
case .rotatingDots:
|
||||
indicator = createRotatingDotsIndicator()
|
||||
case .flickeringDots:
|
||||
indicator = createFlickeringDotsIndicator()
|
||||
case .scalingDots:
|
||||
indicator = createScalingDotsIndicator()
|
||||
case .opacityDots:
|
||||
indicator = createOpacityDotsIndicator()
|
||||
case .equalizer:
|
||||
indicator = createEqualizerIndicator()
|
||||
case .growingArc:
|
||||
indicator = createGrowingArcIndicator()
|
||||
case .growingCircle:
|
||||
indicator = createGrowingCircleIndicator()
|
||||
case .gradient(let colors):
|
||||
indicator = createGradientIndicator(colors: colors)
|
||||
}
|
||||
|
||||
if isVisible {
|
||||
return AnyView(indicator
|
||||
.onAppear {
|
||||
self.isAnimating = true
|
||||
}
|
||||
.onDisappear {
|
||||
self.isAnimating = false
|
||||
})
|
||||
} else {
|
||||
return AnyView(Text(""))
|
||||
}
|
||||
}
|
||||
|
||||
func createDefaultIndicator() -> AnyView {
|
||||
let count = 8
|
||||
let indicator = GeometryReader { (geometry: GeometryProxy) in
|
||||
ForEach(0..<count) { index in
|
||||
Group { () -> AnyView in
|
||||
let height = geometry.size.height / 3.2
|
||||
let width = height / 2
|
||||
let angle = 2 * CGFloat.pi / CGFloat(count) * CGFloat(index)
|
||||
let x = (geometry.size.width / 2 - height / 2) * cos(angle)
|
||||
let y = (geometry.size.height / 2 - height / 2) * sin(angle)
|
||||
let rect = RoundedRectangle(cornerRadius: width / 2 + 1).frame(width: width, height: height)
|
||||
.rotationEffect(Angle(radians: Double(angle + CGFloat.pi / 2)))
|
||||
.offset(x: x, y: y)
|
||||
return AnyView(rect
|
||||
.opacity(!self.isAnimating ? 1 : 0.3)
|
||||
.animation(Animation.default
|
||||
.repeatForever(autoreverses: true)
|
||||
.delay(Double(index) / Double(count) / 2)
|
||||
)
|
||||
)
|
||||
}.frame(width: geometry.size.width, height: geometry.size.height)
|
||||
}
|
||||
}
|
||||
return AnyView(indicator)
|
||||
}
|
||||
|
||||
func createArcsIndicator() -> AnyView {
|
||||
let count = 3
|
||||
let indicator = GeometryReader { (geometry: GeometryProxy) in
|
||||
ForEach(0..<count) { index in
|
||||
Group { () -> Path in
|
||||
var p = Path()
|
||||
p.addArc(center: CGPoint(x: geometry.size.width / 2, y: geometry.size.height / 2),
|
||||
radius: geometry.size.width / 2 - CGFloat(index) * CGFloat(count),
|
||||
startAngle: .degrees(0),
|
||||
endAngle: .degrees(Double(Int.random(in: 120...300))),
|
||||
clockwise: true)
|
||||
return p.strokedPath(.init(lineWidth: 2))
|
||||
}.frame(width: geometry.size.width, height: geometry.size.height)
|
||||
.rotationEffect(!self.isAnimating ? .degrees(0) : .degrees(360))
|
||||
.animation(Animation.default
|
||||
.speed(Double.random(in: 0.2...0.5))
|
||||
.repeatForever(autoreverses: false))
|
||||
}
|
||||
}
|
||||
return AnyView(indicator)
|
||||
}
|
||||
|
||||
func createRotatingDotsIndicator() -> AnyView {
|
||||
AnyView(GeometryReader { (geometry: GeometryProxy) in
|
||||
ForEach(0..<5) { index in
|
||||
Group {
|
||||
Circle()
|
||||
.frame(width: geometry.size.width / 5, height: geometry.size.height / 5)
|
||||
.scaleEffect(!self.isAnimating ? 1 - CGFloat(index) / 5 : 0.2 + CGFloat(index) / 5)
|
||||
.offset(y: geometry.size.width / 10 - geometry.size.height / 2)
|
||||
}.frame(width: geometry.size.width, height: geometry.size.height)
|
||||
.rotationEffect(!self.isAnimating ? .degrees(0) : .degrees(360))
|
||||
.animation(Animation
|
||||
.timingCurve(0.5, 0.15 + Double(index) / 5, 0.25, 1, duration: 1.5)
|
||||
.repeatForever(autoreverses: false))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func createFlickeringDotsIndicator() -> AnyView {
|
||||
let count = 8
|
||||
let duration = 0.5
|
||||
let indicator = GeometryReader { (geometry: GeometryProxy) in
|
||||
ForEach(0..<count) { index in
|
||||
Group { () -> AnyView in
|
||||
let size = geometry.size.height / 5
|
||||
let angle = 2 * CGFloat.pi / CGFloat(count) * CGFloat(index)
|
||||
let x = (geometry.size.width / 2 - size / 2) * cos(angle)
|
||||
let y = (geometry.size.height / 2 - size / 2) * sin(angle)
|
||||
let circle = Circle()
|
||||
.frame(width: size, height: size)
|
||||
.scaleEffect(!self.isAnimating ? 1 : 0.5)
|
||||
.opacity(!self.isAnimating ? 1 : 0.3)
|
||||
.animation(Animation.linear(duration: duration)
|
||||
.repeatForever(autoreverses: true)
|
||||
.delay(duration * Double(index) / Double(count) * 2)
|
||||
)
|
||||
.offset(x: x, y: y)
|
||||
return AnyView(circle)
|
||||
}.frame(width: geometry.size.width, height: geometry.size.height)
|
||||
}
|
||||
}
|
||||
return AnyView(indicator)
|
||||
}
|
||||
|
||||
func createScalingDotsIndicator() -> AnyView {
|
||||
let count = 3
|
||||
let inset = 2
|
||||
let indicator = GeometryReader { (geometry: GeometryProxy) in
|
||||
ForEach(0..<count) { index in
|
||||
Group { () -> AnyView in
|
||||
let size = (geometry.size.width - CGFloat(inset) * CGFloat(count - 1)) / CGFloat(count)
|
||||
let circle = Circle()
|
||||
.frame(width: size, height: size)
|
||||
return AnyView(circle
|
||||
.scaleEffect(!self.isAnimating ? 1 : 0.3)
|
||||
.animation(Animation.easeOut
|
||||
.repeatForever(autoreverses: true)
|
||||
.delay(Double(index) / Double(count) / 2)
|
||||
)
|
||||
.offset(x: (size + CGFloat(inset)) * CGFloat(index) - geometry.size.width / 2 + size / 2)
|
||||
)
|
||||
}
|
||||
}.frame(width: geometry.size.width, height: geometry.size.height)
|
||||
}
|
||||
return AnyView(indicator)
|
||||
}
|
||||
|
||||
func createOpacityDotsIndicator() -> AnyView {
|
||||
let count = 3
|
||||
let inset = 4
|
||||
let indicator = GeometryReader { (geometry: GeometryProxy) in
|
||||
ForEach(0..<count) { index in
|
||||
Group { () -> AnyView in
|
||||
let size = (geometry.size.width - CGFloat(inset) * CGFloat(count - 1)) / CGFloat(count)
|
||||
let circle = Circle()
|
||||
.frame(width: size, height: size)
|
||||
return AnyView(circle
|
||||
.scaleEffect(!self.isAnimating ? 1 : 0.9)
|
||||
.opacity(!self.isAnimating ? 1 : 0.3)
|
||||
.animation(Animation.easeOut
|
||||
.repeatForever(autoreverses: true)
|
||||
.delay(index % 2 == 0 ? 0.2 : 0)
|
||||
)
|
||||
.offset(x: (size + CGFloat(inset)) * CGFloat(index) - geometry.size.width / 2 + size / 2)
|
||||
)
|
||||
}
|
||||
}.frame(width: geometry.size.width, height: geometry.size.height)
|
||||
}
|
||||
return AnyView(indicator)
|
||||
}
|
||||
|
||||
func createEqualizerIndicator() -> AnyView {
|
||||
let count = 5
|
||||
let indicator = GeometryReader { (geometry: GeometryProxy) in
|
||||
ForEach(0..<count) { index in
|
||||
Group { () -> AnyView in
|
||||
let size = geometry.size.width / CGFloat(count) / 2
|
||||
let rect = RoundedRectangle(cornerRadius: 3)
|
||||
.frame(width: size, height: geometry.size.height)
|
||||
return AnyView(rect
|
||||
.scaleEffect(x: 1, y: !self.isAnimating ? 1 : 0.4, anchor: .center)
|
||||
.animation(Animation.easeOut
|
||||
.delay(0.2)
|
||||
.repeatForever(autoreverses: true)
|
||||
.delay(Double(index) / Double(count) / 2)
|
||||
)
|
||||
.offset(x: 2 * size * CGFloat(index) - geometry.size.width / 2 + size / 2)
|
||||
)
|
||||
}
|
||||
}.frame(width: geometry.size.width, height: geometry.size.height)
|
||||
}
|
||||
return AnyView(indicator)
|
||||
}
|
||||
|
||||
func createGrowingArcIndicator() -> AnyView {
|
||||
let indicator = GeometryReader { (geometry: GeometryProxy) in
|
||||
GrowingArc(p: self.parameter).stroke(Color.red, lineWidth: 4)
|
||||
}.onAppear() {
|
||||
withAnimation(Animation.easeIn(duration: 2).repeatForever(autoreverses: false)) {
|
||||
self.parameter = 1
|
||||
}
|
||||
}.onDisappear() {
|
||||
self.parameter = 0
|
||||
}
|
||||
|
||||
return AnyView(indicator)
|
||||
}
|
||||
|
||||
func createGrowingCircleIndicator() -> AnyView {
|
||||
|
||||
let indicator = GeometryReader { (geometry: GeometryProxy) in
|
||||
Circle()
|
||||
.frame(width: geometry.size.width, height: geometry.size.height)
|
||||
.scaleEffect(!self.isAnimating ? 0 : 1)
|
||||
.opacity(!self.isAnimating ? 1 : 0)
|
||||
.animation(Animation.easeIn(duration: 1.1)
|
||||
.repeatForever(autoreverses: false))
|
||||
}
|
||||
|
||||
return AnyView(indicator)
|
||||
}
|
||||
|
||||
func createGradientIndicator(colors: [Color]) -> AnyView {
|
||||
let colors = Gradient(colors: colors)
|
||||
let conic = AngularGradient(gradient: colors, center: .center, startAngle: .zero, endAngle: .degrees(360))
|
||||
|
||||
let indicator = GeometryReader { (geometry: GeometryProxy) in
|
||||
Circle()
|
||||
.strokeBorder(conic, lineWidth: 4)
|
||||
.frame(width: geometry.size.width, height: geometry.size.height)
|
||||
.rotationEffect(!self.isAnimating ? .degrees(0) : .degrees(360))
|
||||
.animation(Animation.linear(duration: 1.5)
|
||||
.repeatForever(autoreverses: false))
|
||||
}
|
||||
|
||||
return AnyView(indicator)
|
||||
}
|
||||
}
|
||||
|
||||
struct GrowingArc : Shape {
|
||||
|
||||
var maxLength = 2 * Double.pi - 0.7
|
||||
var lag = 0.35
|
||||
var p: Double
|
||||
|
||||
var animatableData: Double {
|
||||
get { return p }
|
||||
set { p = newValue }
|
||||
}
|
||||
|
||||
func path(in rect: CGRect) -> Path {
|
||||
|
||||
let h = p * 2
|
||||
var length = h * maxLength
|
||||
if h > 1 && h < lag + 1 {
|
||||
length = maxLength
|
||||
}
|
||||
if h > lag + 1 {
|
||||
let coeff = 1 / (1 - lag)
|
||||
let n = h - 1 - lag
|
||||
length = (1 - n * coeff) * maxLength
|
||||
}
|
||||
|
||||
let first = Double.pi / 2
|
||||
let second = 4 * Double.pi - first
|
||||
|
||||
var end = h * first
|
||||
if h > 1 {
|
||||
end = first + (h - 1) * second
|
||||
}
|
||||
|
||||
let start = end + length
|
||||
|
||||
var p = Path()
|
||||
p.addArc(center: CGPoint(x: rect.size.width/2, y: rect.size.width/2),
|
||||
radius: rect.size.width/2,
|
||||
startAngle: Angle(radians: start),
|
||||
endAngle: Angle(radians: end),
|
||||
clockwise: true)
|
||||
return p
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||
</dict>
|
||||
</plist>
|
||||
Reference in New Issue
Block a user