diff --git a/.circleci/config.yml b/.circleci/config.yml index 473e690..62d0964 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,30 +1,66 @@ version: 2 jobs: - build-and-test: + build-and-test-pods: macos: - xcode: 12.5.1 - working_directory: /Users/distiller/project - environment: - FL_OUTPUT_DIR: /Users/distiller/project/Example/fastlane/test_output - FASTLANE_LANE: test + xcode: 13.4.1 shell: /bin/bash --login -o pipefail steps: - checkout - - run: mkdir $FL_OUTPUT_DIR - run: bundle install - run: name: Fastlane - command: cd Example; bundle exec fastlane $FASTLANE_LANE; cd -- - - run: - command: cp $FL_OUTPUT_DIR/report.junit $FL_OUTPUT_DIR/results.xml - when: always + command: bundle exec fastlane ios test_pod + - store_test_results: + path: test_output/report.xml - store_artifacts: - path: /Users/distiller/project/Example/fastlane + path: /tmp/test-results + destination: scan-test-results + - store_artifacts: + path: ~/Library/Logs/scan + destination: scan-logs + build-and-test-spm: + macos: + xcode: 13.4.1 + shell: /bin/bash --login -o pipefail + steps: + - checkout + - run: bundle install + - run: + name: Fastlane + command: bundle exec fastlane ios test_spm - store_test_results: - path: /Users/distiller/project/Example/fastlane/test_output + path: test_output/report.xml + - store_artifacts: + path: /tmp/test-results + destination: scan-test-results + - store_artifacts: + path: ~/Library/Logs/scan + destination: scan-logs + danger: + macos: + xcode: 13.4.1 + working_directory: /Users/distiller/project + shell: /bin/bash --login -o pipefail + steps: + - run: + name: Setup Environment Variables + command: | + echo 'export PATH=~/.mint/bin:$PATH' >> $BASH_ENV + - checkout + - run: brew update + - run: brew install mint + - run: mint bootstrap --link --overwrite y + - run: swiftlint version + - run: brew tap danger/tap + - run: brew install danger/tap/danger-swift + - run: + name: Danger + command: danger-swift ci workflows: version: 2 build-test-adhoc: jobs: - - build-and-test + - build-and-test-pods + - build-and-test-spm + - danger diff --git a/.gitignore b/.gitignore index f10e94b..73f7efd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,11 @@ # OS X -.DS_Store +.DS* # Xcode build/ *.pbxuser !default.pbxuser -*.mode1v3 +*.mode* !default.mode1v3 *.mode2v3 !default.mode2v3 @@ -18,9 +18,14 @@ profile DerivedData *.hmap *.ipa +**/*.xcodeproj/*.mode* +**/*.xcodeproj/*.pbxuser +**/*.xcodeproj/*.xcworkspace +**/*.xcodeproj/xcuserdata +**/*.xcworkspace/xcuserdata # Pods -/Example/Pods/* +**/Pods/* # Bundler .bundle @@ -29,3 +34,7 @@ DerivedData fastlane/report.xml fastlane/test_output/report.html fastlane/test_output/report.junit + +# SPM +.swiftpm/* + diff --git a/.swiftlint.yml b/.swiftlint.yml new file mode 100644 index 0000000..fefe4dd --- /dev/null +++ b/.swiftlint.yml @@ -0,0 +1,40 @@ +disabled_rules: # rule identifiers to exclude from running + - todo + - line_length + - large_tuple +opt_in_rules: + - force_unwrapping + +custom_rules: + weak_root_coordinator: + name: "Weak Root Coordinator" + message: "Root coordinators should be weak to avoid reference cycles." + regex: "(? Bool { + guard let firstWord = ghCommit.commit.message.components(separatedBy: " ").first else { + return false + } + return firstWord == "Merge" || firstWord == "Revert" || firstWord == "fixup!" || firstWord == "squash!" +} + +/// Fails if the commit’s message does not satisfy Chris Beams’s +/// [“The seven rules of a great Git commit message”](https://chris.beams.io/posts/git-commit/). +func validateMessageIsGreat(for ghCommit: GitHub.Commit) { + guard !messageIsGenerated(for: ghCommit) else { return } + + let messageComponents = ghCommit.commit.message.components(separatedBy: "\n") + let title = messageComponents[0] + + // Rule 1 + if messageComponents.count > 1 { + let separator = messageComponents[1] + if !separator.isEmpty { + fail("Commit message \(ghCommit.sha) is missing a blank line between title and body.") + } + } + + // Rule 2 + if title.count > 50 { + fail("Commit title \(ghCommit.sha) is \(title.count) characters long (title should be limited to 50 characters).") + } + + // Rule 3 + if title.first != title.capitalized.first { + fail("Commit title \(ghCommit.sha) is not capitalized.") + } + + // Rule 4 + if title.hasSuffix(".") { + fail("Commit title \(ghCommit.sha) ends with a period.") + } + + // Rule 5 + // Use the imperative mood in the subject line + // Not validated here + + // Rule 6 + let body = messageComponents.dropFirst() + let lineNumbers = body.indices.map({ $0 + 1 }) + for (lineNumber, line) in zip(lineNumbers, body) where line.count > 72 { + fail("Commit message \(ghCommit.sha) line \(lineNumber) is \(line.count) characters long (body should be wrapped at 72 characters).") + } + + // Rule 7 + // Use the body to explain what and why vs. how + // Not validated here +} + +// MARK: - Validations + +let danger = Danger() +let pullRequest = danger.github.pullRequest + +try validateTitleAllowsMerging(for: pullRequest) + +let unmergeablePrefixes = ["fixup!", "squash!", "WIP"] +danger.github.commits.forEach { + validateMessage(for: $0, doesNotHavePrefixes: unmergeablePrefixes) + validateMessageIsGreat(for: $0) +} + +if let additions = pullRequest.additions, let deletions = pullRequest.deletions, additions < deletions { + message("🎉 This PR removes more code than it adds! (\(additions - deletions) net lines)") +} + +SwiftLint.lint(inline: true, directory: "Session") diff --git a/Example/PodApp/Podfile b/Example/PodApp/Podfile new file mode 100644 index 0000000..bd9357f --- /dev/null +++ b/Example/PodApp/Podfile @@ -0,0 +1,7 @@ +platform :ios, '14.0' +use_frameworks! + +pod 'SplitScreenScanner', :path => '../..' + +target 'SplitScreenScanner_Example' +target 'SplitScreenScanner_Tests' diff --git a/Example/PodApp/Podfile.lock b/Example/PodApp/Podfile.lock new file mode 100644 index 0000000..1538e0f --- /dev/null +++ b/Example/PodApp/Podfile.lock @@ -0,0 +1,23 @@ +PODS: + - Sections (0.8.0) + - SplitScreenScanner (10.0.0): + - Sections + +DEPENDENCIES: + - SplitScreenScanner (from `../..`) + +SPEC REPOS: + trunk: + - Sections + +EXTERNAL SOURCES: + SplitScreenScanner: + :path: "../.." + +SPEC CHECKSUMS: + Sections: efc268a207d0e7afba82d2a0efd6cdf61872b5d4 + SplitScreenScanner: 14f7388b33bb57afc2dfd1eab6af0bd18a45b9a2 + +PODFILE CHECKSUM: a50e47e37e36a517f8de6ae75d836fb0fdfdecfd + +COCOAPODS: 1.8.4 diff --git a/Example/SplitScreenScanner.xcodeproj/project.pbxproj b/Example/PodApp/SplitScreenScanner.xcodeproj/project.pbxproj similarity index 96% rename from Example/SplitScreenScanner.xcodeproj/project.pbxproj rename to Example/PodApp/SplitScreenScanner.xcodeproj/project.pbxproj index da1ed02..154f601 100644 --- a/Example/SplitScreenScanner.xcodeproj/project.pbxproj +++ b/Example/PodApp/SplitScreenScanner.xcodeproj/project.pbxproj @@ -85,12 +85,12 @@ 607FACC71AFB9204008FA782 = { isa = PBXGroup; children = ( + 5A10582FC7764D7166BEC816 /* Frameworks */, + 7AD3BD2B8ECABDA384C3019F /* Pods */, 607FACF51AFB993E008FA782 /* Podspec Metadata */, - 607FACD21AFB9204008FA782 /* Example for SplitScreenScanner */, - 607FACE81AFB9204008FA782 /* Tests */, 607FACD11AFB9204008FA782 /* Products */, - 7AD3BD2B8ECABDA384C3019F /* Pods */, - 5A10582FC7764D7166BEC816 /* Frameworks */, + 607FACD21AFB9204008FA782 /* Sources */, + 607FACE81AFB9204008FA782 /* Tests */, ); sourceTree = ""; }; @@ -103,18 +103,18 @@ name = Products; sourceTree = ""; }; - 607FACD21AFB9204008FA782 /* Example for SplitScreenScanner */ = { + 607FACD21AFB9204008FA782 /* Sources */ = { isa = PBXGroup; children = ( 607FACD51AFB9204008FA782 /* AppDelegate.swift */, - C96B76EA206C481F000D9F9D /* StartScanningViewController.swift */, - 607FACD91AFB9204008FA782 /* Main.storyboard */, 607FACDC1AFB9204008FA782 /* Images.xcassets */, 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */, + 607FACD91AFB9204008FA782 /* Main.storyboard */, + C96B76EA206C481F000D9F9D /* StartScanningViewController.swift */, 607FACD31AFB9204008FA782 /* Supporting Files */, ); - name = "Example for SplitScreenScanner"; - path = SplitScreenScanner; + name = Sources; + path = ../Sources; sourceTree = ""; }; 607FACD31AFB9204008FA782 /* Supporting Files */ = { @@ -133,7 +133,8 @@ C95DD8E0207ED14A0069C5C0 /* ScanToContinueViewModelTests.swift */, C9928C03207550F9001B36DD /* SplitScannerViewModelTests.swift */, ); - path = Tests; + name = Tests; + path = ../Tests; sourceTree = ""; }; 607FACE91AFB9204008FA782 /* Supporting Files */ = { @@ -301,7 +302,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "if which ${PODS_ROOT}/SwiftLint/swiftlint >/dev/null; then\n ${PODS_ROOT}/SwiftLint/swiftlint\nelse\n echo \"SwiftLint does not exist\"\n exit 1\nfi\n"; + shellScript = "if [ $CONFIGURATION != \"Debug\" ]; then\n exit 0\nfi\n\nif [ $CIRCLECI ]; then # CI runs lint through danger\n exit 0\nfi\n\nPATH=$PATH:/opt/homebrew/bin #On AS brew installs here\nif which mint >/dev/null; then\n cd ../..\n echo `pwd`\n mint run -m Mintfile SwiftLint .\nelse\n echo \"Mint does not exist\"\n exit 1\nfi\n"; }; D6A7D50011191BEB905D7F99 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; @@ -460,7 +461,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.3; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -508,7 +509,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.3; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; @@ -522,8 +523,8 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; DEVELOPMENT_TEAM = T4U6BU9TBH; - INFOPLIST_FILE = SplitScreenScanner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.3; + INFOPLIST_FILE = "$(SRCROOT)/../Sources/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MODULE_NAME = ExampleApp; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; @@ -538,8 +539,8 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; DEVELOPMENT_TEAM = T4U6BU9TBH; - INFOPLIST_FILE = SplitScreenScanner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.3; + INFOPLIST_FILE = "$(SRCROOT)/../Sources/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MODULE_NAME = ExampleApp; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; @@ -558,7 +559,7 @@ "DEBUG=1", "$(inherited)", ); - INFOPLIST_FILE = Tests/Info.plist; + INFOPLIST_FILE = ../Tests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -575,7 +576,7 @@ "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", ); - INFOPLIST_FILE = Tests/Info.plist; + INFOPLIST_FILE = ../Tests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/Example/SplitScreenScanner.xcodeproj/xcshareddata/xcschemes/SplitScreenScanner-Example.xcscheme b/Example/PodApp/SplitScreenScanner.xcodeproj/xcshareddata/xcschemes/SplitScreenScanner-Example.xcscheme similarity index 100% rename from Example/SplitScreenScanner.xcodeproj/xcshareddata/xcschemes/SplitScreenScanner-Example.xcscheme rename to Example/PodApp/SplitScreenScanner.xcodeproj/xcshareddata/xcschemes/SplitScreenScanner-Example.xcscheme diff --git a/Example/SplitScreenScanner.xcworkspace/contents.xcworkspacedata b/Example/PodApp/SplitScreenScanner.xcworkspace/contents.xcworkspacedata similarity index 100% rename from Example/SplitScreenScanner.xcworkspace/contents.xcworkspacedata rename to Example/PodApp/SplitScreenScanner.xcworkspace/contents.xcworkspacedata diff --git a/Example/SplitScreenScanner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Example/PodApp/SplitScreenScanner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from Example/SplitScreenScanner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to Example/PodApp/SplitScreenScanner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/Example/SplitScreenScanner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/Example/PodApp/SplitScreenScanner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings similarity index 100% rename from Example/SplitScreenScanner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings rename to Example/PodApp/SplitScreenScanner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/Example/Podfile b/Example/Podfile deleted file mode 100644 index 21966ce..0000000 --- a/Example/Podfile +++ /dev/null @@ -1,10 +0,0 @@ -platform :ios, '13.3' -use_frameworks! - -pod 'SplitScreenScanner', :path => '../' - -target 'SplitScreenScanner_Example' do - pod 'SwiftLint' -end - -target 'SplitScreenScanner_Tests' diff --git a/Example/Podfile.lock b/Example/Podfile.lock deleted file mode 100644 index 915274d..0000000 --- a/Example/Podfile.lock +++ /dev/null @@ -1,28 +0,0 @@ -PODS: - - Sections (0.8.0) - - SplitScreenScanner (9.1.2): - - Sections - - SwiftLint (0.34.0) - -DEPENDENCIES: - - SplitScreenScanner (from `../`) - - SwiftLint - -SPEC REPOS: - "git@github.com:clutter/Specs.git": - - Sections - trunk: - - SwiftLint - -EXTERNAL SOURCES: - SplitScreenScanner: - :path: "../" - -SPEC CHECKSUMS: - Sections: efc268a207d0e7afba82d2a0efd6cdf61872b5d4 - SplitScreenScanner: 49c6e8302807ab1db9361bb682ea5b4335b9b921 - SwiftLint: 79d48a17c6565dc286c37efb8322c7b450f95c67 - -PODFILE CHECKSUM: e3b551128f802187ddddf037b42e5f79c866fb2a - -COCOAPODS: 1.8.4 diff --git a/Example/SplitScreenScanner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Example/SPMApp/SplitScreenScanner.xcworkspace/contents.xcworkspacedata similarity index 63% rename from Example/SplitScreenScanner.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Example/SPMApp/SplitScreenScanner.xcworkspace/contents.xcworkspacedata index ecaa4d5..99f0b65 100644 --- a/Example/SplitScreenScanner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/Example/SPMApp/SplitScreenScanner.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "group:SplitScreenScannerExample.xcodeproj"> diff --git a/Example/SPMApp/SplitScreenScanner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Example/SPMApp/SplitScreenScanner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Example/SPMApp/SplitScreenScanner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Example/SPMApp/SplitScreenScanner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/Example/SPMApp/SplitScreenScanner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..0c67376 --- /dev/null +++ b/Example/SPMApp/SplitScreenScanner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,5 @@ + + + + + diff --git a/Example/SPMApp/SplitScreenScanner.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Example/SPMApp/SplitScreenScanner.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..58f905b --- /dev/null +++ b/Example/SPMApp/SplitScreenScanner.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "Sections", + "repositoryURL": "https://github.com/litso/Sections.git", + "state": { + "branch": null, + "revision": "9d48e2858bd0b94e5f32b62057c0691df5ddb034", + "version": "0.10.1" + } + } + ] + }, + "version": 1 +} diff --git a/Example/SPMApp/SplitScreenScannerExample.xcodeproj/project.pbxproj b/Example/SPMApp/SplitScreenScannerExample.xcodeproj/project.pbxproj new file mode 100644 index 0000000..9b04fe2 --- /dev/null +++ b/Example/SPMApp/SplitScreenScannerExample.xcodeproj/project.pbxproj @@ -0,0 +1,602 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 52; + objects = { + +/* Begin PBXBuildFile section */ + 033C486D28907AB7001A2C9D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; }; + 033C486E28907AC1001A2C9D /* StartScanningViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C96B76EA206C481F000D9F9D /* StartScanningViewController.swift */; }; + 033C486F28907B34001A2C9D /* ScanHistoryViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C926E5B120783CAD00903887 /* ScanHistoryViewModelTests.swift */; }; + 033C487028907B34001A2C9D /* SplitScannerViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9928C03207550F9001B36DD /* SplitScannerViewModelTests.swift */; }; + 033C487128907B34001A2C9D /* ScanToContinueViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C95DD8E0207ED14A0069C5C0 /* ScanToContinueViewModelTests.swift */; }; + 033C487228907B59001A2C9D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; }; + 033C487328907B5D001A2C9D /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; + 033C487428907B61001A2C9D /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; + 033C487928907C67001A2C9D /* SplitScreenScanner in Frameworks */ = {isa = PBXBuildFile; productRef = 033C487828907C67001A2C9D /* SplitScreenScanner */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 03469E3128907A500036BA6D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 607FACC81AFB9204008FA782 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 03469E1C28907A470036BA6D; + remoteInfo = SplitScreenScannerExample; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 033C487728907C46001A2C9D /* SplitScreenScanner */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = SplitScreenScanner; path = ../..; sourceTree = ""; }; + 03469E1028907A2A0036BA6D /* SplitScreenScannerExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SplitScreenScannerExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 03469E1D28907A470036BA6D /* SplitScreenScannerExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SplitScreenScannerExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C926E5B120783CAD00903887 /* ScanHistoryViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanHistoryViewModelTests.swift; sourceTree = ""; }; + C95DD8E0207ED14A0069C5C0 /* ScanToContinueViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanToContinueViewModelTests.swift; sourceTree = ""; }; + C96B76EA206C481F000D9F9D /* StartScanningViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StartScanningViewController.swift; sourceTree = ""; }; + C9928C03207550F9001B36DD /* SplitScannerViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplitScannerViewModelTests.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 03469E0D28907A2A0036BA6D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 03469E1A28907A470036BA6D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 033C487928907C67001A2C9D /* SplitScreenScanner in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 03602A512890793600E98CFC /* Packages */ = { + isa = PBXGroup; + children = ( + 033C487728907C46001A2C9D /* SplitScreenScanner */, + ); + name = Packages; + sourceTree = ""; + }; + 03602A532890794500E98CFC /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; + 607FACC71AFB9204008FA782 = { + isa = PBXGroup; + children = ( + 03602A512890793600E98CFC /* Packages */, + 607FACD11AFB9204008FA782 /* Products */, + 607FACD21AFB9204008FA782 /* Sources */, + 607FACE81AFB9204008FA782 /* Tests */, + 03602A532890794500E98CFC /* Frameworks */, + ); + sourceTree = ""; + }; + 607FACD11AFB9204008FA782 /* Products */ = { + isa = PBXGroup; + children = ( + 03469E1028907A2A0036BA6D /* SplitScreenScannerExampleTests.xctest */, + 03469E1D28907A470036BA6D /* SplitScreenScannerExample.app */, + ); + name = Products; + sourceTree = ""; + }; + 607FACD21AFB9204008FA782 /* Sources */ = { + isa = PBXGroup; + children = ( + 607FACD51AFB9204008FA782 /* AppDelegate.swift */, + 607FACDC1AFB9204008FA782 /* Images.xcassets */, + 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */, + 607FACD91AFB9204008FA782 /* Main.storyboard */, + C96B76EA206C481F000D9F9D /* StartScanningViewController.swift */, + 607FACD31AFB9204008FA782 /* Supporting Files */, + ); + name = Sources; + path = ../Sources; + sourceTree = ""; + }; + 607FACD31AFB9204008FA782 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 607FACD41AFB9204008FA782 /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 607FACE81AFB9204008FA782 /* Tests */ = { + isa = PBXGroup; + children = ( + 607FACE91AFB9204008FA782 /* Supporting Files */, + C926E5B120783CAD00903887 /* ScanHistoryViewModelTests.swift */, + C95DD8E0207ED14A0069C5C0 /* ScanToContinueViewModelTests.swift */, + C9928C03207550F9001B36DD /* SplitScannerViewModelTests.swift */, + ); + name = Tests; + path = ../Tests; + sourceTree = ""; + }; + 607FACE91AFB9204008FA782 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 607FACEA1AFB9204008FA782 /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 03469E0F28907A2A0036BA6D /* SplitScreenScannerExampleTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 03469E1828907A2A0036BA6D /* Build configuration list for PBXNativeTarget "SplitScreenScannerExampleTests" */; + buildPhases = ( + 03469E0C28907A2A0036BA6D /* Sources */, + 03469E0D28907A2A0036BA6D /* Frameworks */, + 03469E0E28907A2A0036BA6D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 03469E3228907A500036BA6D /* PBXTargetDependency */, + ); + name = SplitScreenScannerExampleTests; + productName = SplitScreenScannerExampleTests; + productReference = 03469E1028907A2A0036BA6D /* SplitScreenScannerExampleTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 03469E1C28907A470036BA6D /* SplitScreenScannerExample */ = { + isa = PBXNativeTarget; + buildConfigurationList = 03469E2E28907A480036BA6D /* Build configuration list for PBXNativeTarget "SplitScreenScannerExample" */; + buildPhases = ( + 03469E1928907A470036BA6D /* Sources */, + 03469E1A28907A470036BA6D /* Frameworks */, + 03469E1B28907A470036BA6D /* Resources */, + 03B8A4C1289352B600C6253C /* Run SwiftLint */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SplitScreenScannerExample; + packageProductDependencies = ( + 033C487828907C67001A2C9D /* SplitScreenScanner */, + ); + productName = SplitScreenScannerExample; + productReference = 03469E1D28907A470036BA6D /* SplitScreenScannerExample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 607FACC81AFB9204008FA782 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1330; + LastUpgradeCheck = 1330; + ORGANIZATIONNAME = CocoaPods; + TargetAttributes = { + 03469E0F28907A2A0036BA6D = { + CreatedOnToolsVersion = 13.3; + TestTargetID = 03469E1C28907A470036BA6D; + }; + 03469E1C28907A470036BA6D = { + CreatedOnToolsVersion = 13.3; + }; + }; + }; + buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "SplitScreenScannerExample" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 607FACC71AFB9204008FA782; + productRefGroup = 607FACD11AFB9204008FA782 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 03469E1C28907A470036BA6D /* SplitScreenScannerExample */, + 03469E0F28907A2A0036BA6D /* SplitScreenScannerExampleTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 03469E0E28907A2A0036BA6D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 03469E1B28907A470036BA6D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 033C487428907B61001A2C9D /* Images.xcassets in Resources */, + 033C487328907B5D001A2C9D /* LaunchScreen.xib in Resources */, + 033C487228907B59001A2C9D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 03B8A4C1289352B600C6253C /* Run SwiftLint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Run SwiftLint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [ $CONFIGURATION != \"Debug\" ]; then\n exit 0\nfi\n\nif [ $CIRCLECI ]; then # CI runs lint through danger\n exit 0\nfi\n\nPATH=$PATH:/opt/homebrew/bin #On AS brew installs here\nif which mint >/dev/null; then\n cd ../..\n echo `pwd`\n mint run -m Mintfile SwiftLint .\nelse\n echo \"Mint does not exist\"\n exit 1\nfi\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 03469E0C28907A2A0036BA6D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 033C487028907B34001A2C9D /* SplitScannerViewModelTests.swift in Sources */, + 033C487128907B34001A2C9D /* ScanToContinueViewModelTests.swift in Sources */, + 033C486F28907B34001A2C9D /* ScanHistoryViewModelTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 03469E1928907A470036BA6D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 033C486E28907AC1001A2C9D /* StartScanningViewController.swift in Sources */, + 033C486D28907AB7001A2C9D /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 03469E3228907A500036BA6D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 03469E1C28907A470036BA6D /* SplitScreenScannerExample */; + targetProxy = 03469E3128907A500036BA6D /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 607FACD91AFB9204008FA782 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 607FACDA1AFB9204008FA782 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + 607FACDF1AFB9204008FA782 /* Base */, + ); + name = LaunchScreen.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 03469E1628907A2A0036BA6D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = T4U6BU9TBH; + GCC_C_LANGUAGE_STANDARD = gnu11; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.4; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.clutter.SplitScreenScannerExampleTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SplitScreenScannerExample.app/SplitScreenScannerExample"; + }; + name = Debug; + }; + 03469E1728907A2A0036BA6D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = T4U6BU9TBH; + GCC_C_LANGUAGE_STANDARD = gnu11; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.4; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.clutter.SplitScreenScannerExampleTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SplitScreenScannerExample.app/SplitScreenScannerExample"; + }; + name = Release; + }; + 03469E2F28907A480036BA6D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = T4U6BU9TBH; + GCC_C_LANGUAGE_STANDARD = gnu11; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = ../Sources/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.clutter.SplitScreenScannerExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 03469E3028907A480036BA6D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = T4U6BU9TBH; + GCC_C_LANGUAGE_STANDARD = gnu11; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = ../Sources/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.clutter.SplitScreenScannerExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 607FACED1AFB9204008FA782 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = 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_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + 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 = 14.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 607FACEE1AFB9204008FA782 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = 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_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + 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 = 14.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 03469E1828907A2A0036BA6D /* Build configuration list for PBXNativeTarget "SplitScreenScannerExampleTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 03469E1628907A2A0036BA6D /* Debug */, + 03469E1728907A2A0036BA6D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 03469E2E28907A480036BA6D /* Build configuration list for PBXNativeTarget "SplitScreenScannerExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 03469E2F28907A480036BA6D /* Debug */, + 03469E3028907A480036BA6D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "SplitScreenScannerExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 607FACED1AFB9204008FA782 /* Debug */, + 607FACEE1AFB9204008FA782 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCSwiftPackageProductDependency section */ + 033C487828907C67001A2C9D /* SplitScreenScanner */ = { + isa = XCSwiftPackageProductDependency; + productName = SplitScreenScanner; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 607FACC81AFB9204008FA782 /* Project object */; +} diff --git a/Example/SPMApp/SplitScreenScannerExample.xcodeproj/xcshareddata/xcschemes/SplitScreenScannerExample.xcscheme b/Example/SPMApp/SplitScreenScannerExample.xcodeproj/xcshareddata/xcschemes/SplitScreenScannerExample.xcscheme new file mode 100644 index 0000000..f4f8c26 --- /dev/null +++ b/Example/SPMApp/SplitScreenScannerExample.xcodeproj/xcshareddata/xcschemes/SplitScreenScannerExample.xcscheme @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/SplitScreenScanner/AppDelegate.swift b/Example/Sources/AppDelegate.swift similarity index 100% rename from Example/SplitScreenScanner/AppDelegate.swift rename to Example/Sources/AppDelegate.swift diff --git a/Example/SplitScreenScanner/Base.lproj/LaunchScreen.xib b/Example/Sources/Base.lproj/LaunchScreen.xib similarity index 100% rename from Example/SplitScreenScanner/Base.lproj/LaunchScreen.xib rename to Example/Sources/Base.lproj/LaunchScreen.xib diff --git a/Example/SplitScreenScanner/Base.lproj/Main.storyboard b/Example/Sources/Base.lproj/Main.storyboard similarity index 100% rename from Example/SplitScreenScanner/Base.lproj/Main.storyboard rename to Example/Sources/Base.lproj/Main.storyboard diff --git a/Example/Sources/Images.xcassets/AccentColor.colorset/Contents.json b/Example/Sources/Images.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..22c4bb0 --- /dev/null +++ b/Example/Sources/Images.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/SplitScreenScanner/Images.xcassets/AppIcon.appiconset/Contents.json b/Example/Sources/Images.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from Example/SplitScreenScanner/Images.xcassets/AppIcon.appiconset/Contents.json rename to Example/Sources/Images.xcassets/AppIcon.appiconset/Contents.json diff --git a/Example/Sources/Images.xcassets/Contents.json b/Example/Sources/Images.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Example/Sources/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/SplitScreenScanner/Info.plist b/Example/Sources/Info.plist similarity index 100% rename from Example/SplitScreenScanner/Info.plist rename to Example/Sources/Info.plist diff --git a/Example/SplitScreenScanner/StartScanningViewController.swift b/Example/Sources/StartScanningViewController.swift similarity index 96% rename from Example/SplitScreenScanner/StartScanningViewController.swift rename to Example/Sources/StartScanningViewController.swift index d44f6dd..d2ea1a4 100644 --- a/Example/SplitScreenScanner/StartScanningViewController.swift +++ b/Example/Sources/StartScanningViewController.swift @@ -34,7 +34,7 @@ class StartScanningViewController: UIViewController { extension StartScanningViewController: SplitScannerCoordinatorDelegate { func didScanBarcode(_ splitScannerCoordinator: SplitScannerCoordinator, barcode: String) -> ScanResult { print("Scanned: " + barcode) - switch Int(arc4random_uniform(4)) { + switch Int.random(in: 0...4) { case 0...1: return .success(description: "Nice scan!") case 2: @@ -57,7 +57,7 @@ extension StartScanningViewController: ScanHistoryDataSource { } var tableViewHeaderSubtitle: String? { - let uncompletedItemCount = arc4random_uniform(10) + let uncompletedItemCount = Int.random(in: 0...10) return "\(uncompletedItemCount) / 10" } diff --git a/Example/fastlane/Fastfile b/Example/fastlane/Fastfile deleted file mode 100644 index 2cb7ec4..0000000 --- a/Example/fastlane/Fastfile +++ /dev/null @@ -1,27 +0,0 @@ -# This file contains the fastlane.tools configuration -# You can find the documentation at https://docs.fastlane.tools -# -# For a list of all available actions, check out -# -# https://docs.fastlane.tools/actions -# - -# Uncomment the line if you want fastlane to automatically update itself -# update_fastlane - -# This is the minimum version number required. -# Update this, if you use features of a newer version -fastlane_version "1.44.0" - -default_platform :ios - -platform :ios do - before_all do - cocoapods - end - - desc "Runs all the tests" - lane :test do - scan(scheme: "SplitScreenScanner-Example", device: "iPhone 7") - end -end diff --git a/Mintfile b/Mintfile new file mode 100644 index 0000000..53d43ec --- /dev/null +++ b/Mintfile @@ -0,0 +1 @@ +realm/SwiftLint@0.48.0 \ No newline at end of file diff --git a/Package.resolved b/Package.resolved new file mode 100644 index 0000000..58f905b --- /dev/null +++ b/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "Sections", + "repositoryURL": "https://github.com/litso/Sections.git", + "state": { + "branch": null, + "revision": "9d48e2858bd0b94e5f32b62057c0691df5ddb034", + "version": "0.10.1" + } + } + ] + }, + "version": 1 +} diff --git a/Package.swift b/Package.swift new file mode 100644 index 0000000..e3d10fe --- /dev/null +++ b/Package.swift @@ -0,0 +1,26 @@ +// swift-tools-version:5.3 + +import PackageDescription + +let package = Package( + name: "SplitScreenScanner", + platforms: [.iOS(.v14)], + products: [ + .library( + name: "SplitScreenScanner", + targets: ["SplitScreenScanner"] + ) + ], + dependencies: [ + .package(url: "https://github.com/litso/Sections.git", .upToNextMajor(from: "0.10.1")) + ], + targets: [ + .target( + name: "SplitScreenScanner", + dependencies: [ + "Sections" + ] + ) + ], + swiftLanguageVersions: [.v5] +) diff --git a/SplitScreenScanner/Assets/.gitkeep b/Sources/SplitScreenScanner/Assets/.gitkeep similarity index 100% rename from SplitScreenScanner/Assets/.gitkeep rename to Sources/SplitScreenScanner/Assets/.gitkeep diff --git a/SplitScreenScanner/Assets/ScanHistoryCell.xib b/Sources/SplitScreenScanner/Assets/ScanHistoryCell.xib similarity index 100% rename from SplitScreenScanner/Assets/ScanHistoryCell.xib rename to Sources/SplitScreenScanner/Assets/ScanHistoryCell.xib diff --git a/SplitScreenScanner/Assets/SplitScanner.storyboard b/Sources/SplitScreenScanner/Assets/SplitScanner.storyboard similarity index 100% rename from SplitScreenScanner/Assets/SplitScanner.storyboard rename to Sources/SplitScreenScanner/Assets/SplitScanner.storyboard diff --git a/SplitScreenScanner/Assets/SubtitleHeaderView.xib b/Sources/SplitScreenScanner/Assets/SubtitleHeaderView.xib similarity index 100% rename from SplitScreenScanner/Assets/SubtitleHeaderView.xib rename to Sources/SplitScreenScanner/Assets/SubtitleHeaderView.xib diff --git a/SplitScreenScanner/Classes/.gitkeep b/Sources/SplitScreenScanner/Classes/.gitkeep similarity index 100% rename from SplitScreenScanner/Classes/.gitkeep rename to Sources/SplitScreenScanner/Classes/.gitkeep diff --git a/SplitScreenScanner/Classes/BarcodeScannerViewController.swift b/Sources/SplitScreenScanner/Classes/BarcodeScannerViewController.swift similarity index 100% rename from SplitScreenScanner/Classes/BarcodeScannerViewController.swift rename to Sources/SplitScreenScanner/Classes/BarcodeScannerViewController.swift diff --git a/SplitScreenScanner/Classes/BarcodeScannerViewModel.swift b/Sources/SplitScreenScanner/Classes/BarcodeScannerViewModel.swift similarity index 99% rename from SplitScreenScanner/Classes/BarcodeScannerViewModel.swift rename to Sources/SplitScreenScanner/Classes/BarcodeScannerViewModel.swift index 3c968b7..08a9d5e 100644 --- a/SplitScreenScanner/Classes/BarcodeScannerViewModel.swift +++ b/Sources/SplitScreenScanner/Classes/BarcodeScannerViewModel.swift @@ -5,7 +5,7 @@ // Created by Sean Machen on 4/6/18. // -import Foundation +import UIKit protocol BarcodeScannerViewModelDelegate: AnyObject { func didScanBarcode(_ barcodeScannerViewModel: BarcodeScannerViewModel, barcode: String) diff --git a/SplitScreenScanner/Classes/ContinuousBarcodeScanner.swift b/Sources/SplitScreenScanner/Classes/ContinuousBarcodeScanner.swift similarity index 97% rename from SplitScreenScanner/Classes/ContinuousBarcodeScanner.swift rename to Sources/SplitScreenScanner/Classes/ContinuousBarcodeScanner.swift index 36fd5f7..e59c2a0 100644 --- a/SplitScreenScanner/Classes/ContinuousBarcodeScanner.swift +++ b/Sources/SplitScreenScanner/Classes/ContinuousBarcodeScanner.swift @@ -60,7 +60,7 @@ final class ContinuousBarcodeScanner { private let captureSession: AVCaptureSession private var previewLayer: AVCaptureVideoPreviewLayer private let previewView: UIView - private var barcodeOverlayView: UIView? = nil + private var barcodeOverlayView: UIView? init(previewView: UIView) throws { self.previewView = previewView @@ -109,49 +109,49 @@ final class ContinuousBarcodeScanner { } captureSession.addOutput(metadataCapture.metadataOutput) } - + func drawOverlayFor(barcodeObject: AVMetadataMachineReadableCodeObject) -> UIView? { - + guard let barcode = barcodeObject.stringValue, let bounds = self.previewLayer.transformedMetadataObject(for: barcodeObject)?.bounds else { return nil } - + let overlayView = UIView(frame: bounds) let overlayLabel = UILabel(frame: overlayView.bounds) - + overlayView.layer.borderWidth = 5.0 overlayView.backgroundColor = UIColor.green.withAlphaComponent(0.75) overlayView.layer.borderColor = UIColor.green.cgColor - + overlayLabel.font = UIFont.boldSystemFont(ofSize: 18) overlayLabel.text = barcode overlayLabel.textColor = UIColor.white overlayLabel.textAlignment = .center overlayLabel.numberOfLines = 0 - + if barcodeObject.type != .qr { overlayLabel.sizeToFit() overlayView.frame = CGRect(x: bounds.origin.x, y: bounds.origin.y, width: bounds.width, height: overlayLabel.frame.height + 10) } - + overlayLabel.center = overlayView.convert(overlayView.center, from: overlayLabel) overlayView.addSubview(overlayLabel) return overlayView } - + func addBarcodeOverlayViewFor(barcodeObject: AVMetadataMachineReadableCodeObject) { - if let _ = self.barcodeOverlayView { + if self.barcodeOverlayView != nil { self.barcodeOverlayView?.removeFromSuperview() self.barcodeOverlayView = nil } - + guard let overlayView = self.drawOverlayFor(barcodeObject: barcodeObject) else { return } - + self.barcodeOverlayView = overlayView self.previewView.addSubview(overlayView) } diff --git a/SplitScreenScanner/Classes/Coordinator.swift b/Sources/SplitScreenScanner/Classes/Coordinator.swift similarity index 100% rename from SplitScreenScanner/Classes/Coordinator.swift rename to Sources/SplitScreenScanner/Classes/Coordinator.swift diff --git a/SplitScreenScanner/Classes/DeviceProvider.swift b/Sources/SplitScreenScanner/Classes/DeviceProvider.swift similarity index 100% rename from SplitScreenScanner/Classes/DeviceProvider.swift rename to Sources/SplitScreenScanner/Classes/DeviceProvider.swift diff --git a/SplitScreenScanner/Classes/IdentifierViewCell.swift b/Sources/SplitScreenScanner/Classes/IdentifierViewCell.swift similarity index 100% rename from SplitScreenScanner/Classes/IdentifierViewCell.swift rename to Sources/SplitScreenScanner/Classes/IdentifierViewCell.swift diff --git a/SplitScreenScanner/Classes/ReticleView.swift b/Sources/SplitScreenScanner/Classes/ReticleView.swift similarity index 100% rename from SplitScreenScanner/Classes/ReticleView.swift rename to Sources/SplitScreenScanner/Classes/ReticleView.swift diff --git a/SplitScreenScanner/Classes/ScanHistory.swift b/Sources/SplitScreenScanner/Classes/ScanHistory.swift similarity index 100% rename from SplitScreenScanner/Classes/ScanHistory.swift rename to Sources/SplitScreenScanner/Classes/ScanHistory.swift diff --git a/SplitScreenScanner/Classes/ScanHistoryCell.swift b/Sources/SplitScreenScanner/Classes/ScanHistoryCell.swift similarity index 100% rename from SplitScreenScanner/Classes/ScanHistoryCell.swift rename to Sources/SplitScreenScanner/Classes/ScanHistoryCell.swift diff --git a/SplitScreenScanner/Classes/ScanHistoryDataSource.swift b/Sources/SplitScreenScanner/Classes/ScanHistoryDataSource.swift similarity index 100% rename from SplitScreenScanner/Classes/ScanHistoryDataSource.swift rename to Sources/SplitScreenScanner/Classes/ScanHistoryDataSource.swift diff --git a/SplitScreenScanner/Classes/ScanHistoryTableViewController.swift b/Sources/SplitScreenScanner/Classes/ScanHistoryTableViewController.swift similarity index 98% rename from SplitScreenScanner/Classes/ScanHistoryTableViewController.swift rename to Sources/SplitScreenScanner/Classes/ScanHistoryTableViewController.swift index 0a66165..dacb144 100644 --- a/SplitScreenScanner/Classes/ScanHistoryTableViewController.swift +++ b/Sources/SplitScreenScanner/Classes/ScanHistoryTableViewController.swift @@ -89,9 +89,7 @@ class ScanHistoryTableViewController: UITableViewController { viewModel.isHapticFeedbackEnabled = false } - override func viewDidDisappear(_ animated: Bool) { - super.viewDidDisappear(animated) - + deinit { NotificationCenter.default.removeObserver(self) } diff --git a/SplitScreenScanner/Classes/ScanHistoryViewModel.swift b/Sources/SplitScreenScanner/Classes/ScanHistoryViewModel.swift similarity index 100% rename from SplitScreenScanner/Classes/ScanHistoryViewModel.swift rename to Sources/SplitScreenScanner/Classes/ScanHistoryViewModel.swift diff --git a/SplitScreenScanner/Classes/ScanToContinueDataSource.swift b/Sources/SplitScreenScanner/Classes/ScanToContinueDataSource.swift similarity index 100% rename from SplitScreenScanner/Classes/ScanToContinueDataSource.swift rename to Sources/SplitScreenScanner/Classes/ScanToContinueDataSource.swift diff --git a/SplitScreenScanner/Classes/ScanToContinueErrorViewController.swift b/Sources/SplitScreenScanner/Classes/ScanToContinueErrorViewController.swift similarity index 100% rename from SplitScreenScanner/Classes/ScanToContinueErrorViewController.swift rename to Sources/SplitScreenScanner/Classes/ScanToContinueErrorViewController.swift diff --git a/SplitScreenScanner/Classes/ScanToContinueViewController.swift b/Sources/SplitScreenScanner/Classes/ScanToContinueViewController.swift similarity index 100% rename from SplitScreenScanner/Classes/ScanToContinueViewController.swift rename to Sources/SplitScreenScanner/Classes/ScanToContinueViewController.swift diff --git a/SplitScreenScanner/Classes/ScanToContinueViewModel.swift b/Sources/SplitScreenScanner/Classes/ScanToContinueViewModel.swift similarity index 100% rename from SplitScreenScanner/Classes/ScanToContinueViewModel.swift rename to Sources/SplitScreenScanner/Classes/ScanToContinueViewModel.swift diff --git a/SplitScreenScanner/Classes/ScannerHapticFeedbackManager.swift b/Sources/SplitScreenScanner/Classes/ScannerHapticFeedbackManager.swift similarity index 100% rename from SplitScreenScanner/Classes/ScannerHapticFeedbackManager.swift rename to Sources/SplitScreenScanner/Classes/ScannerHapticFeedbackManager.swift diff --git a/SplitScreenScanner/Classes/ScannerStyleKit.swift b/Sources/SplitScreenScanner/Classes/ScannerStyleKit.swift similarity index 100% rename from SplitScreenScanner/Classes/ScannerStyleKit.swift rename to Sources/SplitScreenScanner/Classes/ScannerStyleKit.swift diff --git a/SplitScreenScanner/Classes/SplitScannerCoordinator.swift b/Sources/SplitScreenScanner/Classes/SplitScannerCoordinator.swift similarity index 100% rename from SplitScreenScanner/Classes/SplitScannerCoordinator.swift rename to Sources/SplitScreenScanner/Classes/SplitScannerCoordinator.swift diff --git a/SplitScreenScanner/Classes/SplitScannerViewController.swift b/Sources/SplitScreenScanner/Classes/SplitScannerViewController.swift similarity index 100% rename from SplitScreenScanner/Classes/SplitScannerViewController.swift rename to Sources/SplitScreenScanner/Classes/SplitScannerViewController.swift diff --git a/SplitScreenScanner/Classes/SplitScannerViewModel.swift b/Sources/SplitScreenScanner/Classes/SplitScannerViewModel.swift similarity index 97% rename from SplitScreenScanner/Classes/SplitScannerViewModel.swift rename to Sources/SplitScreenScanner/Classes/SplitScannerViewModel.swift index 0c4a2b0..e873457 100644 --- a/SplitScreenScanner/Classes/SplitScannerViewModel.swift +++ b/Sources/SplitScreenScanner/Classes/SplitScannerViewModel.swift @@ -5,9 +5,9 @@ // Created by Sean Machen on 3/27/18. // -import Foundation +import UIKit -protocol SplitScannerViewModelDelegate: class { +protocol SplitScannerViewModelDelegate: AnyObject { func didTapDismissButton(_ splitScreenScannerViewModel: SplitScannerViewModel) } diff --git a/SplitScreenScanner/Classes/SubtitleHeaderView.swift b/Sources/SplitScreenScanner/Classes/SubtitleHeaderView.swift similarity index 100% rename from SplitScreenScanner/Classes/SubtitleHeaderView.swift rename to Sources/SplitScreenScanner/Classes/SubtitleHeaderView.swift diff --git a/SplitScreenScanner.podspec b/SplitScreenScanner.podspec index 55f8119..9f69392 100644 --- a/SplitScreenScanner.podspec +++ b/SplitScreenScanner.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = 'SplitScreenScanner' - s.version = '9.1.2' + s.version = '10.0.0' s.summary = 'Swift library for scanning barcodes with half the screen devoted to scan history' # This description is used to generate tags and improve search results. @@ -22,23 +22,18 @@ Framework for scanning and verifying multiple barcodes, for example, in logistic DESC s.homepage = 'https://github.com/clutter/SplitScreenScanner' - # s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' s.license = { :type => 'MIT', :file => 'LICENSE' } s.author = { 'Sean Machen' => 'sean.machen@clutter.com' } s.source = { :git => 'https://github.com/clutter/SplitScreenScanner.git', :tag => s.version.to_s } - # s.social_media_url = 'https://twitter.com/' - s.ios.deployment_target = '13.3' + s.ios.deployment_target = '14.0' s.swift_versions = ['5.0'] - s.source_files = 'SplitScreenScanner/Classes/**/*' + s.source_files = 'Sources/SplitScreenScanner/Classes/**/*' s.resource_bundles = { - 'SplitScreenScanner' => ['SplitScreenScanner/Assets/**/*.{xib,storyboard}'] + 'SplitScreenScanner' => ['Sources/SplitScreenScanner/Assets/**/*.{xib,storyboard}'] } s.dependency 'Sections' - - # s.public_header_files = 'Pod/Classes/**/*.h' - # s.frameworks = 'UIKit', 'MapKit' end diff --git a/_Pods.xcodeproj b/_Pods.xcodeproj deleted file mode 120000 index 3c5a8e7..0000000 --- a/_Pods.xcodeproj +++ /dev/null @@ -1 +0,0 @@ -Example/Pods/Pods.xcodeproj \ No newline at end of file diff --git a/fastlane/Fastfile b/fastlane/Fastfile new file mode 100644 index 0000000..8c3d5e5 --- /dev/null +++ b/fastlane/Fastfile @@ -0,0 +1,33 @@ +# This file contains the fastlane.tools configuration +# You can find the documentation at https://docs.fastlane.tools +# +# For a list of all available actions, check out +# +# https://docs.fastlane.tools/actions +# + +# Uncomment the line if you want fastlane to automatically update itself +# update_fastlane + +default_platform(:ios) + +platform :ios do + desc "Runs all the tests" + lane :test_pod do + cocoapods(podfile: './Example/PodApp/Podfile') + scan( + workspace: "./Example/PodApp/SplitScreenScanner.xcworkspace", + scheme: "SplitScreenScanner-Example", + device: "iPhone 8", + clean: true + ) + end + lane :test_spm do + scan( + workspace: './Example/SPMApp/SplitScreenScanner.xcworkspace', + scheme: "SplitScreenScannerExample", + device: "iPhone 8", + clean: true + ) + end +end diff --git a/Example/fastlane/README.md b/fastlane/README.md similarity index 88% rename from Example/fastlane/README.md rename to fastlane/README.md index 54940a5..dfa3771 100644 --- a/Example/fastlane/README.md +++ b/fastlane/README.md @@ -16,11 +16,16 @@ or alternatively using `brew cask install fastlane` # Available Actions ## iOS -### ios test +### ios test_pod ``` -fastlane ios test +fastlane ios test_pod ``` Runs all the tests +### ios test_spm +``` +fastlane ios test_spm +``` + ----