Compare commits
13 Commits
Author | SHA1 | Date |
---|---|---|
![]() |
04716937eb | |
![]() |
e5fc8f485a | |
![]() |
3b3dbfeca4 | |
![]() |
ab008b3a20 | |
![]() |
6580730266 | |
![]() |
a6c35eead6 | |
![]() |
fea7e96393 | |
![]() |
bb6752fc8e | |
![]() |
bf43c33deb | |
![]() |
9a6090178d | |
![]() |
fb77534d2c | |
![]() |
e2f1e53e91 | |
![]() |
4a929b03f2 |
|
@ -1 +1 @@
|
||||||
4.0
|
4.2
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Workspace
|
||||||
|
version = "1.0">
|
||||||
|
<FileRef
|
||||||
|
location = "self:">
|
||||||
|
</FileRef>
|
||||||
|
</Workspace>
|
|
@ -1,10 +1,10 @@
|
||||||
language: objective-c
|
language: objective-c
|
||||||
osx_image: xcode9
|
osx_image: xcode10
|
||||||
before_install:
|
before_install:
|
||||||
- gem install xcpretty
|
- gem install xcpretty
|
||||||
script:
|
script:
|
||||||
- cd Example
|
- cd Example
|
||||||
- xcodebuild -version
|
- xcodebuild -version
|
||||||
- xcodebuild -project SplitflapExample.xcodeproj -scheme SplitflapTests -sdk iphonesimulator -destination "platform=iOS Simulator,name=iPhone 6" -configuration Release GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES GCC_GENERATE_TEST_COVERAGE_FILES=YES ONLY_ACTIVE_ARCH=YES test | xcpretty -c
|
- xcodebuild -project SplitflapExample.xcodeproj -scheme SplitflapTests -sdk iphonesimulator -destination "platform=iOS Simulator,name=iPhone 8" -configuration Release GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES GCC_GENERATE_TEST_COVERAGE_FILES=YES ONLY_ACTIVE_ARCH=YES test | xcpretty -c
|
||||||
after_success:
|
after_success:
|
||||||
- bash <(curl -s https://codecov.io/bash)
|
- bash <(curl -s https://codecov.io/bash)
|
||||||
|
|
10
CHANGELOG.md
10
CHANGELOG.md
|
@ -1,5 +1,15 @@
|
||||||
# Change log
|
# Change log
|
||||||
|
|
||||||
|
## [Version 4.1.0](https://github.com/yannickl/Splitflap/releases/tag/4.1.0)
|
||||||
|
*Released on 2018-11-24.*
|
||||||
|
|
||||||
|
- [FIX] Don't show lines when color is set to nil
|
||||||
|
|
||||||
|
## [Version 4.0.0](https://github.com/yannickl/Splitflap/releases/tag/4.0.0)
|
||||||
|
*Released on 2018-09-25.*
|
||||||
|
|
||||||
|
**Swift 4.2 Supports**
|
||||||
|
|
||||||
## [Version 3.0.1](https://github.com/yannickl/Splitflap/releases/tag/3.0.1)
|
## [Version 3.0.1](https://github.com/yannickl/Splitflap/releases/tag/3.0.1)
|
||||||
*Released on 2017-12-10.*
|
*Released on 2017-12-10.*
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>FMWK</string>
|
<string>FMWK</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>3.0.1</string>
|
<string>4.1.0</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
|
|
|
@ -353,7 +353,7 @@
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastSwiftUpdateCheck = 0710;
|
LastSwiftUpdateCheck = 0710;
|
||||||
LastUpgradeCheck = 0900;
|
LastUpgradeCheck = 1020;
|
||||||
ORGANIZATIONNAME = "Yannick LORIOT";
|
ORGANIZATIONNAME = "Yannick LORIOT";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
CE5040591C050024007D9E9F = {
|
CE5040591C050024007D9E9F = {
|
||||||
|
@ -362,7 +362,7 @@
|
||||||
};
|
};
|
||||||
CE525D871BF3833700429200 = {
|
CE525D871BF3833700429200 = {
|
||||||
CreatedOnToolsVersion = 7.1;
|
CreatedOnToolsVersion = 7.1;
|
||||||
LastSwiftMigration = 0900;
|
LastSwiftMigration = 1020;
|
||||||
};
|
};
|
||||||
CE525DAC1BF4FBC800429200 = {
|
CE525DAC1BF4FBC800429200 = {
|
||||||
CreatedOnToolsVersion = 7.1;
|
CreatedOnToolsVersion = 7.1;
|
||||||
|
@ -370,13 +370,13 @@
|
||||||
};
|
};
|
||||||
CEB1399F1BF266DD00DE6BA9 = {
|
CEB1399F1BF266DD00DE6BA9 = {
|
||||||
CreatedOnToolsVersion = 7.1;
|
CreatedOnToolsVersion = 7.1;
|
||||||
LastSwiftMigration = 0900;
|
LastSwiftMigration = 1020;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
buildConfigurationList = CEB1399B1BF266DD00DE6BA9 /* Build configuration list for PBXProject "SplitflapExample" */;
|
buildConfigurationList = CEB1399B1BF266DD00DE6BA9 /* Build configuration list for PBXProject "SplitflapExample" */;
|
||||||
compatibilityVersion = "Xcode 3.2";
|
compatibilityVersion = "Xcode 3.2";
|
||||||
developmentRegion = English;
|
developmentRegion = en;
|
||||||
hasScannedForEncodings = 0;
|
hasScannedForEncodings = 0;
|
||||||
knownRegions = (
|
knownRegions = (
|
||||||
en,
|
en,
|
||||||
|
@ -562,7 +562,7 @@
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.yannickloriot.tvOSExample;
|
PRODUCT_BUNDLE_IDENTIFIER = com.yannickloriot.tvOSExample;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SDKROOT = appletvos;
|
SDKROOT = appletvos;
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_VERSION = 4.2;
|
||||||
TARGETED_DEVICE_FAMILY = 3;
|
TARGETED_DEVICE_FAMILY = 3;
|
||||||
TVOS_DEPLOYMENT_TARGET = 9.0;
|
TVOS_DEPLOYMENT_TARGET = 9.0;
|
||||||
};
|
};
|
||||||
|
@ -578,7 +578,7 @@
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.yannickloriot.tvOSExample;
|
PRODUCT_BUNDLE_IDENTIFIER = com.yannickloriot.tvOSExample;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SDKROOT = appletvos;
|
SDKROOT = appletvos;
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_VERSION = 4.2;
|
||||||
TARGETED_DEVICE_FAMILY = 3;
|
TARGETED_DEVICE_FAMILY = 3;
|
||||||
TVOS_DEPLOYMENT_TARGET = 9.0;
|
TVOS_DEPLOYMENT_TARGET = 9.0;
|
||||||
};
|
};
|
||||||
|
@ -602,7 +602,7 @@
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.yannickloriot.Splitflap;
|
PRODUCT_BUNDLE_IDENTIFIER = com.yannickloriot.Splitflap;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_VERSION = 4.0;
|
SWIFT_VERSION = 5.0;
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
VERSION_INFO_PREFIX = "";
|
VERSION_INFO_PREFIX = "";
|
||||||
};
|
};
|
||||||
|
@ -626,7 +626,7 @@
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.yannickloriot.Splitflap;
|
PRODUCT_BUNDLE_IDENTIFIER = com.yannickloriot.Splitflap;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_VERSION = 4.0;
|
SWIFT_VERSION = 5.0;
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
VERSION_INFO_PREFIX = "";
|
VERSION_INFO_PREFIX = "";
|
||||||
};
|
};
|
||||||
|
@ -640,7 +640,7 @@
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.yannickloriot.SplitflapTests;
|
PRODUCT_BUNDLE_IDENTIFIER = com.yannickloriot.SplitflapTests;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_VERSION = 4.2;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
|
@ -652,7 +652,7 @@
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.yannickloriot.SplitflapTests;
|
PRODUCT_BUNDLE_IDENTIFIER = com.yannickloriot.SplitflapTests;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_VERSION = 4.2;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
@ -660,6 +660,7 @@
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
@ -668,12 +669,14 @@
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
CLANG_WARN_COMMA = YES;
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
CLANG_WARN_NON_LITERAL_NULL_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_LITERAL_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
@ -705,7 +708,7 @@
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_VERSION = 4.2;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
|
@ -714,6 +717,7 @@
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
@ -722,12 +726,14 @@
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
CLANG_WARN_COMMA = YES;
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
CLANG_WARN_NON_LITERAL_NULL_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_LITERAL_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
@ -752,7 +758,7 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_VERSION = 4.2;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
};
|
};
|
||||||
|
@ -767,7 +773,7 @@
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.yannickloriot.SplitflapExample;
|
PRODUCT_BUNDLE_IDENTIFIER = com.yannickloriot.SplitflapExample;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_VERSION = 4.0;
|
SWIFT_VERSION = 5.0;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
|
@ -780,7 +786,7 @@
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.yannickloriot.SplitflapExample;
|
PRODUCT_BUNDLE_IDENTIFIER = com.yannickloriot.SplitflapExample;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_VERSION = 4.0;
|
SWIFT_VERSION = 5.0;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>IDEDidComputeMac32BitWarning</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0900"
|
LastUpgradeVersion = "1020"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
@ -26,7 +26,6 @@
|
||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
language = ""
|
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
<Testables>
|
<Testables>
|
||||||
</Testables>
|
</Testables>
|
||||||
|
@ -37,7 +36,6 @@
|
||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
language = ""
|
|
||||||
launchStyle = "0"
|
launchStyle = "0"
|
||||||
useCustomWorkingDirectory = "NO"
|
useCustomWorkingDirectory = "NO"
|
||||||
ignoresPersistentStateOnLaunch = "NO"
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0900"
|
LastUpgradeVersion = "1020"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
@ -10,9 +10,8 @@
|
||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
language = ""
|
codeCoverageEnabled = "YES"
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
codeCoverageEnabled = "YES">
|
|
||||||
<Testables>
|
<Testables>
|
||||||
<TestableReference
|
<TestableReference
|
||||||
skipped = "NO">
|
skipped = "NO">
|
||||||
|
@ -32,7 +31,6 @@
|
||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
language = ""
|
|
||||||
launchStyle = "0"
|
launchStyle = "0"
|
||||||
useCustomWorkingDirectory = "NO"
|
useCustomWorkingDirectory = "NO"
|
||||||
ignoresPersistentStateOnLaunch = "NO"
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
|
|
@ -14,7 +14,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||||
var window: UIWindow?
|
var window: UIWindow?
|
||||||
|
|
||||||
|
|
||||||
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
|
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
||||||
// Override point for customization after application launch.
|
// Override point for customization after application launch.
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>3.0.1</string>
|
<string>4.1.0</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
|
|
|
@ -42,7 +42,7 @@ class ViewController: UIViewController, SplitflapDataSource, SplitflapDelegate {
|
||||||
}
|
}
|
||||||
|
|
||||||
fileprivate func updateButtonWithTitle(_ title: String) {
|
fileprivate func updateButtonWithTitle(_ title: String) {
|
||||||
actionButton.setTitle("Say \(words[currentIndex])!", for: UIControlState())
|
actionButton.setTitle("Say \(words[currentIndex])!", for: UIControl.State())
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Splitflap DataSource Methods
|
// MARK: - Splitflap DataSource Methods
|
||||||
|
|
|
@ -12,7 +12,7 @@ import UIKit
|
||||||
class AppDelegate: UIResponder, UIApplicationDelegate {
|
class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||||
var window: UIWindow?
|
var window: UIWindow?
|
||||||
|
|
||||||
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
|
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
|
||||||
// Override point for customization after application launch.
|
// Override point for customization after application launch.
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>3.0.1</string>
|
<string>4.1.0</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
|
|
|
@ -1,31 +1,32 @@
|
||||||
//
|
// swift-tools-version:5.0
|
||||||
// Splitflap
|
// The swift-tools-version declares the minimum version of Swift required to build this package.
|
||||||
//
|
|
||||||
// Copyright 2015-present Yannick Loriot.
|
|
||||||
// http://yannickloriot.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
|
|
||||||
// in the Software without restriction, including without limitation the rights
|
|
||||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
// copies of the Software, and to permit persons to whom the Software is
|
|
||||||
// furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in
|
|
||||||
// all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION 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 PackageDescription
|
import PackageDescription
|
||||||
|
|
||||||
let package = Package(
|
let package = Package(
|
||||||
name: "Splitflap"
|
name: "Splitflap",
|
||||||
|
platforms: [
|
||||||
|
.macOS(.v10_12),
|
||||||
|
.iOS(.v8),
|
||||||
|
.tvOS(.v9)
|
||||||
|
],
|
||||||
|
products: [
|
||||||
|
// Products define the executables and libraries produced by a package, and make them visible to other packages.
|
||||||
|
.library(
|
||||||
|
name: "Splitflap",
|
||||||
|
targets: ["Splitflap"]),
|
||||||
|
],
|
||||||
|
dependencies: [
|
||||||
|
// Dependencies declare other packages that this package depends on.
|
||||||
|
// .package(url: /* package url */, from: "1.0.0"),
|
||||||
|
],
|
||||||
|
targets: [
|
||||||
|
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
|
||||||
|
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
|
||||||
|
.target(
|
||||||
|
name: "Splitflap",
|
||||||
|
dependencies: [],
|
||||||
|
path: "Sources"
|
||||||
|
)
|
||||||
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
10
README.md
10
README.md
|
@ -11,7 +11,7 @@
|
||||||
<a href="http://codecov.io/github/yannickl/Splitflap"><img alt="Code coverage status" src="http://codecov.io/github/yannickl/Splitflap/coverage.svg?branch=master"/></a>
|
<a href="http://codecov.io/github/yannickl/Splitflap"><img alt="Code coverage status" src="http://codecov.io/github/yannickl/Splitflap/coverage.svg?branch=master"/></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
**Splitflap** is a simple to use component to present changeable alphanumeric text like often used as a public transport timetable in airports or railway stations or with some flip clocks.
|
***🛫 Splitflap*** is a simple to use component to present changeable alphanumeric text like often used as a public transport timetable in airports or railway stations or with some flip clocks.
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#requirements">Requirements</a> • <a href="#usage">Usage</a> • <a href="#installation">Installation</a> • <a href="#contribution">Contribution</a> • <a href="#contact">Contact</a> • <a href="#license-mit">License</a>
|
<a href="#requirements">Requirements</a> • <a href="#usage">Usage</a> • <a href="#installation">Installation</a> • <a href="#contribution">Contribution</a> • <a href="#contact">Contact</a> • <a href="#license-mit">License</a>
|
||||||
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
- iOS 8.0+ / tvOS 9.0+
|
- iOS 8.0+ / tvOS 9.0+
|
||||||
- Xcode 9.0+
|
- Xcode 9.0+
|
||||||
- Swift 4.0+
|
- Swift 4.2+
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ source 'https://github.com/CocoaPods/Specs.git'
|
||||||
platform :ios, '8.0'
|
platform :ios, '8.0'
|
||||||
|
|
||||||
use_frameworks!
|
use_frameworks!
|
||||||
pod 'Splitflap', '~> 3.0.1'
|
pod 'Splitflap', '~> 4.1.0'
|
||||||
```
|
```
|
||||||
|
|
||||||
Install into your project:
|
Install into your project:
|
||||||
|
@ -140,7 +140,7 @@ $ brew install carthage
|
||||||
To integrate `Splitflap` into your Xcode project using Carthage, specify it in your `Cartfile` file:
|
To integrate `Splitflap` into your Xcode project using Carthage, specify it in your `Cartfile` file:
|
||||||
|
|
||||||
```ogdl
|
```ogdl
|
||||||
github "yannickl/Splitflap" >= 3.0.1
|
github "yannickl/Splitflap" >= 4.1.0
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Swift Package Manager
|
#### Swift Package Manager
|
||||||
|
@ -153,7 +153,7 @@ let package = Package(
|
||||||
name: "YOUR_PROJECT_NAME",
|
name: "YOUR_PROJECT_NAME",
|
||||||
targets: [],
|
targets: [],
|
||||||
dependencies: [
|
dependencies: [
|
||||||
.Package(url: "https://github.com/yannickl/Splitflap.git", versions: "3.0.1" ..< Version.max)
|
.Package(url: "https://github.com/yannickl/Splitflap.git", versions: "4.1.0" ..< Version.max)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
|
@ -131,15 +131,15 @@ final class FlapView: UIView, CAAnimationDelegate {
|
||||||
topAnim.fromValue = NSValue(caTransform3D: skewedIdentityTransform)
|
topAnim.fromValue = NSValue(caTransform3D: skewedIdentityTransform)
|
||||||
topAnim.toValue = NSValue(caTransform3D: CATransform3DRotate(skewedIdentityTransform, CGFloat.pi / -2, 1, 0, 0))
|
topAnim.toValue = NSValue(caTransform3D: CATransform3DRotate(skewedIdentityTransform, CGFloat.pi / -2, 1, 0, 0))
|
||||||
topAnim.isRemovedOnCompletion = false
|
topAnim.isRemovedOnCompletion = false
|
||||||
topAnim.fillMode = kCAFillModeForwards
|
topAnim.fillMode = CAMediaTimingFillMode.forwards
|
||||||
topAnim.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
|
topAnim.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeIn)
|
||||||
|
|
||||||
bottomAnim.fromValue = NSValue(caTransform3D: CATransform3DRotate(skewedIdentityTransform, CGFloat.pi / 2, 1, 0, 0))
|
bottomAnim.fromValue = NSValue(caTransform3D: CATransform3DRotate(skewedIdentityTransform, CGFloat.pi / 2, 1, 0, 0))
|
||||||
bottomAnim.toValue = NSValue(caTransform3D: skewedIdentityTransform)
|
bottomAnim.toValue = NSValue(caTransform3D: skewedIdentityTransform)
|
||||||
bottomAnim.delegate = self
|
bottomAnim.delegate = self
|
||||||
bottomAnim.isRemovedOnCompletion = true
|
bottomAnim.isRemovedOnCompletion = true
|
||||||
bottomAnim.fillMode = kCAFillModeBoth
|
bottomAnim.fillMode = CAMediaTimingFillMode.both
|
||||||
bottomAnim.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
|
bottomAnim.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeOut)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Animating the Flap View
|
// MARK: - Animating the Flap View
|
||||||
|
@ -208,8 +208,8 @@ final class FlapView: UIView, CAAnimationDelegate {
|
||||||
topFront.layer.removeAllAnimations()
|
topFront.layer.removeAllAnimations()
|
||||||
|
|
||||||
if animated {
|
if animated {
|
||||||
bringSubview(toFront: topFront)
|
bringSubviewToFront(topFront)
|
||||||
bringSubview(toFront: bottomBack)
|
bringSubviewToFront(bottomBack)
|
||||||
|
|
||||||
// Animation
|
// Animation
|
||||||
topAnim.beginTime = CACurrentMediaTime()
|
topAnim.beginTime = CACurrentMediaTime()
|
||||||
|
@ -219,8 +219,8 @@ final class FlapView: UIView, CAAnimationDelegate {
|
||||||
bottomBack.layer.add(bottomAnim, forKey: "bottomDownFlip")
|
bottomBack.layer.add(bottomAnim, forKey: "bottomDownFlip")
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
bringSubview(toFront: topBack)
|
bringSubviewToFront(topBack)
|
||||||
bringSubview(toFront: bottomBack)
|
bringSubviewToFront(bottomBack)
|
||||||
|
|
||||||
animationTime = animationTime == .tic ? .tac : .tic
|
animationTime = animationTime == .tic ? .tac : .tic
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,6 +91,12 @@ public final class FlapViewBuilder {
|
||||||
*/
|
*/
|
||||||
public var lineColor: UIColor? = UIColor.darkGray
|
public var lineColor: UIColor? = UIColor.darkGray
|
||||||
|
|
||||||
|
/**
|
||||||
|
The flap's middle line height relative to the default. The default value
|
||||||
|
id 1.0.
|
||||||
|
*/
|
||||||
|
public var flipPointHeightFactor: CGFloat = 1.0
|
||||||
|
|
||||||
// MARK: - Initializing a Flap View
|
// MARK: - Initializing a Flap View
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -36,23 +36,23 @@ import Foundation
|
||||||
*/
|
*/
|
||||||
open class SplitflapTokens {
|
open class SplitflapTokens {
|
||||||
/// Numeric characters.
|
/// Numeric characters.
|
||||||
open static let Numeric = (0 ... 9).map { String($0) }
|
public static let Numeric = (0 ... 9).map { String($0) }
|
||||||
|
|
||||||
/// Alphabetic characters (lower and upper cases).
|
/// Alphabetic characters (lower and upper cases).
|
||||||
open static let Alphabetic = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".map { String($0) }
|
public static let Alphabetic = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".map { String($0) }
|
||||||
|
|
||||||
/// Combination of alphabetic (lower and upper cases) and numeric characters.
|
/// Combination of alphabetic (lower and upper cases) and numeric characters.
|
||||||
open static let Alphanumeric = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".map { String($0) }
|
public static let Alphanumeric = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".map { String($0) }
|
||||||
|
|
||||||
/// Combination of alphabetic (lower and upper cases) and numeric characters plus the space.
|
/// Combination of alphabetic (lower and upper cases) and numeric characters plus the space.
|
||||||
open static let AlphanumericAndSpace = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".map { String($0) }
|
public static let AlphanumericAndSpace = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".map { String($0) }
|
||||||
|
|
||||||
/// The 12-hour clock characters (from 1 to 12).
|
/// The 12-hour clock characters (from 1 to 12).
|
||||||
open static let TwelveHourClock = (1 ... 12).map { String($0) }
|
public static let TwelveHourClock = (1 ... 12).map { String($0) }
|
||||||
|
|
||||||
/// The 24-hour clock characters (from 00 to 23).
|
/// The 24-hour clock characters (from 00 to 23).
|
||||||
open static let TwentyFourHourClock = (0 ... 23).map { String(format:"%02d", $0) }
|
public static let TwentyFourHourClock = (0 ... 23).map { String(format:"%02d", $0) }
|
||||||
|
|
||||||
/// The minute/second characters (from 00 to 59).
|
/// The minute/second characters (from 00 to 59).
|
||||||
open static let MinuteAndSecond = (0 ... 59).map { String(format:"%02d", $0) }
|
public static let MinuteAndSecond = (0 ... 59).map { String(format:"%02d", $0) }
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,6 +86,8 @@ final class TileView: UIView {
|
||||||
|
|
||||||
// MARK: - Layout the View
|
// MARK: - Layout the View
|
||||||
|
|
||||||
|
fileprivate var flipPointHeightFactor: CGFloat = 1.0
|
||||||
|
|
||||||
/// Setup the views helping by the given builder.
|
/// Setup the views helping by the given builder.
|
||||||
fileprivate func setupViewsWithBuilder(_ builder: FlapViewBuilder) {
|
fileprivate func setupViewsWithBuilder(_ builder: FlapViewBuilder) {
|
||||||
font = builder.font
|
font = builder.font
|
||||||
|
@ -96,13 +98,17 @@ final class TileView: UIView {
|
||||||
digitLabel.textAlignment = builder.textAlignment
|
digitLabel.textAlignment = builder.textAlignment
|
||||||
digitLabel.textColor = builder.textColor
|
digitLabel.textColor = builder.textColor
|
||||||
digitLabel.backgroundColor = builder.backgroundColor
|
digitLabel.backgroundColor = builder.backgroundColor
|
||||||
|
flipPointHeightFactor = builder.flipPointHeightFactor
|
||||||
mainLineView.backgroundColor = builder.lineColor
|
|
||||||
secondaryLineView.backgroundColor = builder.backgroundColor
|
|
||||||
|
|
||||||
addSubview(digitLabel)
|
addSubview(digitLabel)
|
||||||
addSubview(mainLineView)
|
|
||||||
addSubview(secondaryLineView)
|
// Don't add the line if the color was set to nil
|
||||||
|
if let lineColor = builder.lineColor {
|
||||||
|
mainLineView.backgroundColor = lineColor
|
||||||
|
secondaryLineView.backgroundColor = builder.backgroundColor
|
||||||
|
addSubview(mainLineView)
|
||||||
|
addSubview(secondaryLineView)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Laying out Subviews
|
// MARK: - Laying out Subviews
|
||||||
|
@ -132,14 +138,14 @@ final class TileView: UIView {
|
||||||
if position == .top {
|
if position == .top {
|
||||||
digitLabelFrame.size.height = digitLabelFrame.height * 2
|
digitLabelFrame.size.height = digitLabelFrame.height * 2
|
||||||
digitLabelFrame.origin.y = 0
|
digitLabelFrame.origin.y = 0
|
||||||
mainLineViewFrame = CGRect(x: 0, y: bounds.height - 2, width: bounds.width, height: 4)
|
mainLineViewFrame = CGRect(x: 0, y: bounds.height - (2 * flipPointHeightFactor), width: bounds.width, height: 4 * flipPointHeightFactor)
|
||||||
secondaryLineViewFrame = CGRect(x: 0, y: bounds.height - 1, width: bounds.width, height: 2)
|
secondaryLineViewFrame = CGRect(x: 0, y: bounds.height - (1 * flipPointHeightFactor), width: bounds.width, height: 2 * flipPointHeightFactor)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
digitLabelFrame.size.height = digitLabelFrame.height * 2
|
digitLabelFrame.size.height = digitLabelFrame.height * 2
|
||||||
digitLabelFrame.origin.y = -digitLabelFrame.height / 2
|
digitLabelFrame.origin.y = -digitLabelFrame.height / 2
|
||||||
mainLineViewFrame = CGRect(x: 0, y: -2, width: bounds.width, height: 3)
|
mainLineViewFrame = CGRect(x: 0, y: -2 * flipPointHeightFactor, width: bounds.width, height: 3 * flipPointHeightFactor)
|
||||||
secondaryLineViewFrame = CGRect(x: 0, y: -2, width: bounds.width, height: 2)
|
secondaryLineViewFrame = CGRect(x: 0, y: -2 * flipPointHeightFactor, width: bounds.width, height: 2 * flipPointHeightFactor)
|
||||||
}
|
}
|
||||||
|
|
||||||
digitLabel.frame = digitLabelFrame
|
digitLabel.frame = digitLabelFrame
|
||||||
|
|
|
@ -55,7 +55,7 @@ final class TokenGenerator: IteratorProtocol {
|
||||||
}
|
}
|
||||||
set(newValue) {
|
set(newValue) {
|
||||||
if let value = newValue {
|
if let value = newValue {
|
||||||
currentIndex = tokens.index(of: value) ?? currentIndex
|
currentIndex = tokens.firstIndex(of: value) ?? currentIndex
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
currentIndex = 0
|
currentIndex = 0
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
Pod::Spec.new do |s|
|
Pod::Spec.new do |s|
|
||||||
s.name = 'Splitflap'
|
s.name = 'Splitflap'
|
||||||
s.version = '3.0.1'
|
s.version = '4.1.0'
|
||||||
s.license = 'MIT'
|
s.license = 'MIT'
|
||||||
s.summary = 'A simple split-flap display for your Swift applications'
|
s.summary = 'A simple split-flap display for your Swift applications'
|
||||||
s.description = <<-DESC
|
s.description = <<-DESC
|
||||||
|
|
|
@ -27,14 +27,8 @@
|
||||||
import UIKit
|
import UIKit
|
||||||
import XCTest
|
import XCTest
|
||||||
|
|
||||||
class MockAppDelegate: NSObject, UIApplicationDelegate {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
class XCTTestCaseTemplate: XCTestCase {
|
class XCTTestCaseTemplate: XCTestCase {
|
||||||
override func setUp() {
|
override func setUp() {
|
||||||
super.setUp()
|
super.setUp()
|
||||||
|
|
||||||
UIApplication.shared.delegate = MockAppDelegate()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue