├── .env
├── .gitignore
├── README.md
├── app
├── Axolotl
│ ├── .swiftlint.yml
│ ├── Axolotl.xcodeproj
│ │ └── xcuserdata
│ │ │ └── gregoryfoster.xcuserdatad
│ │ │ └── xcschemes
│ │ │ └── Axolotl.xcscheme
│ ├── Axolotl.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcuserdata
│ │ │ └── gregoryfoster.xcuserdatad
│ │ │ ├── UserInterfaceState.xcuserstate
│ │ │ └── xcdebugger
│ │ │ └── Breakpoints_v2.xcbkptlist
│ ├── Podfile
│ ├── Podfile.lock
│ └── Pods
│ │ ├── Manifest.lock
│ │ ├── Pods.xcodeproj
│ │ ├── project.pbxproj
│ │ └── xcuserdata
│ │ │ └── gregoryfoster.xcuserdatad
│ │ │ └── xcschemes
│ │ │ ├── Pods-Axolotl.xcscheme
│ │ │ └── xcschememanagement.plist
│ │ ├── SwiftLint
│ │ ├── LICENSE
│ │ ├── SwiftLintFramework.framework
│ │ │ ├── Resources
│ │ │ ├── SwiftLintFramework
│ │ │ └── Versions
│ │ │ │ ├── A
│ │ │ │ ├── Frameworks
│ │ │ │ │ ├── Commandant.framework
│ │ │ │ │ │ ├── Commandant
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ └── Versions
│ │ │ │ │ │ │ ├── A
│ │ │ │ │ │ │ ├── Commandant
│ │ │ │ │ │ │ └── Resources
│ │ │ │ │ │ │ │ └── Info.plist
│ │ │ │ │ │ │ └── Current
│ │ │ │ │ ├── Result.framework
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ ├── Result
│ │ │ │ │ │ └── Versions
│ │ │ │ │ │ │ ├── A
│ │ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ │ └── Info.plist
│ │ │ │ │ │ │ └── Result
│ │ │ │ │ │ │ └── Current
│ │ │ │ │ ├── SWXMLHash.framework
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ ├── SWXMLHash
│ │ │ │ │ │ └── Versions
│ │ │ │ │ │ │ ├── A
│ │ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ │ └── Info.plist
│ │ │ │ │ │ │ └── SWXMLHash
│ │ │ │ │ │ │ └── Current
│ │ │ │ │ ├── SourceKittenFramework.framework
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ ├── SourceKittenFramework
│ │ │ │ │ │ └── Versions
│ │ │ │ │ │ │ ├── A
│ │ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ │ └── Info.plist
│ │ │ │ │ │ │ └── SourceKittenFramework
│ │ │ │ │ │ │ └── Current
│ │ │ │ │ ├── SwiftyTextTable.framework
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ ├── SwiftyTextTable
│ │ │ │ │ │ └── Versions
│ │ │ │ │ │ │ ├── A
│ │ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ │ └── Info.plist
│ │ │ │ │ │ │ └── SwiftyTextTable
│ │ │ │ │ │ │ └── Current
│ │ │ │ │ ├── Yams.framework
│ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ ├── Versions
│ │ │ │ │ │ │ ├── A
│ │ │ │ │ │ │ │ ├── Resources
│ │ │ │ │ │ │ │ │ └── Info.plist
│ │ │ │ │ │ │ │ └── Yams
│ │ │ │ │ │ │ └── Current
│ │ │ │ │ │ └── Yams
│ │ │ │ │ ├── libswiftCore.dylib
│ │ │ │ │ ├── libswiftCoreGraphics.dylib
│ │ │ │ │ ├── libswiftDarwin.dylib
│ │ │ │ │ ├── libswiftDispatch.dylib
│ │ │ │ │ ├── libswiftFoundation.dylib
│ │ │ │ │ ├── libswiftIOKit.dylib
│ │ │ │ │ └── libswiftObjectiveC.dylib
│ │ │ │ ├── Resources
│ │ │ │ │ └── Info.plist
│ │ │ │ └── SwiftLintFramework
│ │ │ │ └── Current
│ │ └── swiftlint
│ │ └── Target Support Files
│ │ └── Pods-Axolotl
│ │ ├── Info.plist
│ │ ├── Pods-Axolotl-acknowledgements.markdown
│ │ ├── Pods-Axolotl-acknowledgements.plist
│ │ ├── Pods-Axolotl-dummy.m
│ │ ├── Pods-Axolotl-frameworks.sh
│ │ ├── Pods-Axolotl-resources.sh
│ │ ├── Pods-Axolotl-umbrella.h
│ │ ├── Pods-Axolotl.debug.xcconfig
│ │ ├── Pods-Axolotl.modulemap
│ │ └── Pods-Axolotl.release.xcconfig
└── axolotl
│ ├── Axolotl.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcuserdata
│ │ │ └── gregoryfoster.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── xcuserdata
│ │ └── gregoryfoster.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
│ ├── axolotl
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ ├── Info.plist
│ ├── MotionStream.swift
│ ├── PredictorViewController.swift
│ └── RecorderViewController.swift
│ └── axolotlTests
│ ├── Info.plist
│ └── axolotlTests.swift
├── data
├── sample_0
│ ├── accel.txt
│ └── gyro.txt
├── sample_1
│ ├── accel.txt
│ ├── context.txt
│ └── gyro.txt
├── sample_2
│ ├── accel.txt
│ ├── context.txt
│ └── gyro.txt
├── sample_3
│ ├── accel.txt
│ ├── context.txt
│ └── gyro.txt
├── sample_4
│ ├── accel.txt
│ ├── context.txt
│ └── gyro.txt
├── sample_5
│ ├── accel.txt
│ ├── context.txt
│ └── gyro.txt
├── sample_6
│ ├── accel.txt
│ ├── context.txt
│ └── gyro.txt
└── sample_7
│ ├── accel.txt
│ ├── context.txt
│ └── gyro.txt
├── environment.yml
├── learn_touches.py
├── lib
├── __init__.py
├── axolotl.py
├── learn_location.py
└── learn_touches.py
├── location_model.mlmodel
├── predict_touches_sequence.py
├── touch_model.mlmodel
└── visualize.py
/.env:
--------------------------------------------------------------------------------
1 | source activate AXOLOTL
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.pyc
2 | .DS_Store
3 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Axolotl
2 |
3 | ## About
4 |
5 | Axolotl is a library that attempts to discern user screen taps from the
6 | motion of the accelerometer and gyroscope.
7 |
8 | Key files:
9 |
10 | - `visualize.py`: This visualizes the data in various ways, because *data
11 | science is important*.
12 | - `learn_touches.py`: This learns what samples are touches.
13 | - `learn_location.py`: This learns the location for samples of touches.
14 | - `stats.py`: Runs both learn_touches and learn_location on all samples and
15 | reports statistics.
16 |
17 | This can all be run with python with the current working directory set to the
18 | root directory of this repository.
19 |
20 | ## Authors
21 |
22 | (c) Tomas Reimers, Greg Foster 2016
23 |
--------------------------------------------------------------------------------
/app/Axolotl/.swiftlint.yml:
--------------------------------------------------------------------------------
1 | excluded: # paths to ignore during linting. Takes precedence over `included`.
2 | - Carthage
3 | - Pods
4 |
--------------------------------------------------------------------------------
/app/Axolotl/Axolotl.xcodeproj/xcuserdata/gregoryfoster.xcuserdatad/xcschemes/Axolotl.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
33 |
39 |
40 |
41 |
42 |
43 |
49 |
50 |
51 |
52 |
53 |
54 |
64 |
66 |
72 |
73 |
74 |
75 |
76 |
77 |
83 |
85 |
91 |
92 |
93 |
94 |
96 |
97 |
100 |
101 |
102 |
--------------------------------------------------------------------------------
/app/Axolotl/Axolotl.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/Axolotl/Axolotl.xcworkspace/xcuserdata/gregoryfoster.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomasreimers/axolotl/c43d0a60fee659cdd075f7330a010fa6030bb6c2/app/Axolotl/Axolotl.xcworkspace/xcuserdata/gregoryfoster.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/app/Axolotl/Axolotl.xcworkspace/xcuserdata/gregoryfoster.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/app/Axolotl/Podfile:
--------------------------------------------------------------------------------
1 | platform :ios, '11.0'
2 | use_frameworks!
3 |
4 | target "Axolotl" do
5 | pod 'SwiftLint'
6 | end
7 |
--------------------------------------------------------------------------------
/app/Axolotl/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - SwiftLint (0.20.1)
3 |
4 | DEPENDENCIES:
5 | - SwiftLint
6 |
7 | SPEC CHECKSUMS:
8 | SwiftLint: f60095dc173a3f3ec505bb34f5229c3dfd779a54
9 |
10 | PODFILE CHECKSUM: a1811ac9fc7fadc8c37be7b6ffc63bd60bf00289
11 |
12 | COCOAPODS: 1.2.1
13 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/Manifest.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - SwiftLint (0.20.1)
3 |
4 | DEPENDENCIES:
5 | - SwiftLint
6 |
7 | SPEC CHECKSUMS:
8 | SwiftLint: f60095dc173a3f3ec505bb34f5229c3dfd779a54
9 |
10 | PODFILE CHECKSUM: a1811ac9fc7fadc8c37be7b6ffc63bd60bf00289
11 |
12 | COCOAPODS: 1.2.1
13 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/Pods.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 48;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 6261E232DB8419C0028DC77961B14CBA /* Pods-Axolotl-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F2206A65E2485AC980BEE6034CDAD08B /* Pods-Axolotl-dummy.m */; };
11 | 9FD174A34A7F848FCBAE4D491066E8E0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; };
12 | FB2430BC3F15ADF9EAD43CB31A537CB0 /* Pods-Axolotl-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 27370A151EB6AC275D7A49567BA06B9F /* Pods-Axolotl-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
13 | /* End PBXBuildFile section */
14 |
15 | /* Begin PBXFileReference section */
16 | 0653BF5BE218B0AFF4B92733034334D3 /* Pods-Axolotl-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Axolotl-frameworks.sh"; sourceTree = ""; };
17 | 14DE835E37B9D02382FB345A93F1798C /* Pods-Axolotl-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Axolotl-acknowledgements.plist"; sourceTree = ""; };
18 | 27370A151EB6AC275D7A49567BA06B9F /* Pods-Axolotl-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Axolotl-umbrella.h"; sourceTree = ""; };
19 | 422761AE88D251CFA6D11F795C1D74F5 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
20 | 4EAB764BD4ED28919B6A7C864F851F20 /* Pods-Axolotl.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Axolotl.debug.xcconfig"; sourceTree = ""; };
21 | 590C6D02081C1AA28582AB9EC7F566FF /* Pods-Axolotl.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Axolotl.release.xcconfig"; sourceTree = ""; };
22 | 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
23 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
24 | 9FDBB1242FBF6A56E1E70F2A472AB8A8 /* Pods_Axolotl.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Axolotl.framework; path = "Pods-Axolotl.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
25 | A54420179626353417B70F022ED15111 /* Pods-Axolotl-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Axolotl-acknowledgements.markdown"; sourceTree = ""; };
26 | D8ED19E1165F6635B8B737E72095347D /* Pods-Axolotl.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-Axolotl.modulemap"; sourceTree = ""; };
27 | E42ACB988EBFC5E2324B6D181FFF93C3 /* Pods-Axolotl-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Axolotl-resources.sh"; sourceTree = ""; };
28 | F2206A65E2485AC980BEE6034CDAD08B /* Pods-Axolotl-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Axolotl-dummy.m"; sourceTree = ""; };
29 | /* End PBXFileReference section */
30 |
31 | /* Begin PBXFrameworksBuildPhase section */
32 | 97CA69DE72D8172E7BFFEA3195C4E8C3 /* Frameworks */ = {
33 | isa = PBXFrameworksBuildPhase;
34 | buildActionMask = 2147483647;
35 | files = (
36 | 9FD174A34A7F848FCBAE4D491066E8E0 /* Foundation.framework in Frameworks */,
37 | );
38 | runOnlyForDeploymentPostprocessing = 0;
39 | };
40 | /* End PBXFrameworksBuildPhase section */
41 |
42 | /* Begin PBXGroup section */
43 | 32A23E08346748F1793F899C5FF672C1 /* SwiftLint */ = {
44 | isa = PBXGroup;
45 | children = (
46 | );
47 | name = SwiftLint;
48 | path = SwiftLint;
49 | sourceTree = "";
50 | };
51 | 7DB346D0F39D3F0E887471402A8071AB = {
52 | isa = PBXGroup;
53 | children = (
54 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */,
55 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */,
56 | 9758CC519AE2C57A9659FFC01AAD26F9 /* Pods */,
57 | D472F14813D40EB63B09A7B13BE3CC54 /* Products */,
58 | E90DB8BD388C1D6E011812F06A9837BF /* Targets Support Files */,
59 | );
60 | sourceTree = "";
61 | };
62 | 9758CC519AE2C57A9659FFC01AAD26F9 /* Pods */ = {
63 | isa = PBXGroup;
64 | children = (
65 | 32A23E08346748F1793F899C5FF672C1 /* SwiftLint */,
66 | );
67 | name = Pods;
68 | sourceTree = "";
69 | };
70 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = {
71 | isa = PBXGroup;
72 | children = (
73 | D35AF013A5F0BAD4F32504907A52519E /* iOS */,
74 | );
75 | name = Frameworks;
76 | sourceTree = "";
77 | };
78 | D35AF013A5F0BAD4F32504907A52519E /* iOS */ = {
79 | isa = PBXGroup;
80 | children = (
81 | 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */,
82 | );
83 | name = iOS;
84 | sourceTree = "";
85 | };
86 | D472F14813D40EB63B09A7B13BE3CC54 /* Products */ = {
87 | isa = PBXGroup;
88 | children = (
89 | 9FDBB1242FBF6A56E1E70F2A472AB8A8 /* Pods_Axolotl.framework */,
90 | );
91 | name = Products;
92 | sourceTree = "";
93 | };
94 | E90DB8BD388C1D6E011812F06A9837BF /* Targets Support Files */ = {
95 | isa = PBXGroup;
96 | children = (
97 | ECDD36FC99C6B7F42F1DA49D442D60A0 /* Pods-Axolotl */,
98 | );
99 | name = "Targets Support Files";
100 | sourceTree = "";
101 | };
102 | ECDD36FC99C6B7F42F1DA49D442D60A0 /* Pods-Axolotl */ = {
103 | isa = PBXGroup;
104 | children = (
105 | 422761AE88D251CFA6D11F795C1D74F5 /* Info.plist */,
106 | D8ED19E1165F6635B8B737E72095347D /* Pods-Axolotl.modulemap */,
107 | A54420179626353417B70F022ED15111 /* Pods-Axolotl-acknowledgements.markdown */,
108 | 14DE835E37B9D02382FB345A93F1798C /* Pods-Axolotl-acknowledgements.plist */,
109 | F2206A65E2485AC980BEE6034CDAD08B /* Pods-Axolotl-dummy.m */,
110 | 0653BF5BE218B0AFF4B92733034334D3 /* Pods-Axolotl-frameworks.sh */,
111 | E42ACB988EBFC5E2324B6D181FFF93C3 /* Pods-Axolotl-resources.sh */,
112 | 27370A151EB6AC275D7A49567BA06B9F /* Pods-Axolotl-umbrella.h */,
113 | 4EAB764BD4ED28919B6A7C864F851F20 /* Pods-Axolotl.debug.xcconfig */,
114 | 590C6D02081C1AA28582AB9EC7F566FF /* Pods-Axolotl.release.xcconfig */,
115 | );
116 | name = "Pods-Axolotl";
117 | path = "Target Support Files/Pods-Axolotl";
118 | sourceTree = "";
119 | };
120 | /* End PBXGroup section */
121 |
122 | /* Begin PBXHeadersBuildPhase section */
123 | 5E36CD0F5A9C7CEC338D9C29160743BD /* Headers */ = {
124 | isa = PBXHeadersBuildPhase;
125 | buildActionMask = 2147483647;
126 | files = (
127 | FB2430BC3F15ADF9EAD43CB31A537CB0 /* Pods-Axolotl-umbrella.h in Headers */,
128 | );
129 | runOnlyForDeploymentPostprocessing = 0;
130 | };
131 | /* End PBXHeadersBuildPhase section */
132 |
133 | /* Begin PBXNativeTarget section */
134 | AC0C75829B03443875350B11649AF5AE /* Pods-Axolotl */ = {
135 | isa = PBXNativeTarget;
136 | buildConfigurationList = 9F097DF3D294291AF56588EB5C0D25ED /* Build configuration list for PBXNativeTarget "Pods-Axolotl" */;
137 | buildPhases = (
138 | 684E62A51522227689F3EDD60636FB70 /* Sources */,
139 | 97CA69DE72D8172E7BFFEA3195C4E8C3 /* Frameworks */,
140 | 5E36CD0F5A9C7CEC338D9C29160743BD /* Headers */,
141 | );
142 | buildRules = (
143 | );
144 | dependencies = (
145 | );
146 | name = "Pods-Axolotl";
147 | productName = "Pods-Axolotl";
148 | productReference = 9FDBB1242FBF6A56E1E70F2A472AB8A8 /* Pods_Axolotl.framework */;
149 | productType = "com.apple.product-type.framework";
150 | };
151 | /* End PBXNativeTarget section */
152 |
153 | /* Begin PBXProject section */
154 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = {
155 | isa = PBXProject;
156 | attributes = {
157 | LastSwiftUpdateCheck = 0830;
158 | LastUpgradeCheck = 0700;
159 | };
160 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */;
161 | compatibilityVersion = "Xcode 3.2";
162 | developmentRegion = English;
163 | hasScannedForEncodings = 0;
164 | knownRegions = (
165 | en,
166 | );
167 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB;
168 | productRefGroup = D472F14813D40EB63B09A7B13BE3CC54 /* Products */;
169 | projectDirPath = "";
170 | projectRoot = "";
171 | targets = (
172 | AC0C75829B03443875350B11649AF5AE /* Pods-Axolotl */,
173 | );
174 | };
175 | /* End PBXProject section */
176 |
177 | /* Begin PBXSourcesBuildPhase section */
178 | 684E62A51522227689F3EDD60636FB70 /* Sources */ = {
179 | isa = PBXSourcesBuildPhase;
180 | buildActionMask = 2147483647;
181 | files = (
182 | 6261E232DB8419C0028DC77961B14CBA /* Pods-Axolotl-dummy.m in Sources */,
183 | );
184 | runOnlyForDeploymentPostprocessing = 0;
185 | };
186 | /* End PBXSourcesBuildPhase section */
187 |
188 | /* Begin XCBuildConfiguration section */
189 | 1A41B15D3AA834993ADDD808FA9D8764 /* Release */ = {
190 | isa = XCBuildConfiguration;
191 | buildSettings = {
192 | ALWAYS_SEARCH_USER_PATHS = NO;
193 | CLANG_ANALYZER_NONNULL = YES;
194 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES;
195 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
196 | CLANG_CXX_LIBRARY = "libc++";
197 | CLANG_ENABLE_MODULES = YES;
198 | CLANG_ENABLE_OBJC_ARC = YES;
199 | CLANG_WARN_BOOL_CONVERSION = YES;
200 | CLANG_WARN_CONSTANT_CONVERSION = YES;
201 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES;
202 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
203 | CLANG_WARN_EMPTY_BODY = YES;
204 | CLANG_WARN_ENUM_CONVERSION = YES;
205 | CLANG_WARN_INFINITE_RECURSION = YES;
206 | CLANG_WARN_INT_CONVERSION = YES;
207 | CLANG_WARN_OBJC_ROOT_CLASS = YES;
208 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
209 | CLANG_WARN_UNREACHABLE_CODE = YES;
210 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
211 | CODE_SIGNING_REQUIRED = NO;
212 | COPY_PHASE_STRIP = YES;
213 | ENABLE_NS_ASSERTIONS = NO;
214 | GCC_C_LANGUAGE_STANDARD = gnu99;
215 | GCC_PREPROCESSOR_DEFINITIONS = (
216 | "POD_CONFIGURATION_RELEASE=1",
217 | "$(inherited)",
218 | );
219 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
220 | GCC_WARN_ABOUT_RETURN_TYPE = YES;
221 | GCC_WARN_UNDECLARED_SELECTOR = YES;
222 | GCC_WARN_UNINITIALIZED_AUTOS = YES;
223 | GCC_WARN_UNUSED_FUNCTION = YES;
224 | GCC_WARN_UNUSED_VARIABLE = YES;
225 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
226 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/;
227 | STRIP_INSTALLED_PRODUCT = NO;
228 | SYMROOT = "${SRCROOT}/../build";
229 | VALIDATE_PRODUCT = YES;
230 | };
231 | name = Release;
232 | };
233 | 4226B25A00447FA43A40E26974B3B9A0 /* Debug */ = {
234 | isa = XCBuildConfiguration;
235 | baseConfigurationReference = 4EAB764BD4ED28919B6A7C864F851F20 /* Pods-Axolotl.debug.xcconfig */;
236 | buildSettings = {
237 | CODE_SIGN_IDENTITY = "";
238 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
239 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
240 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
241 | CURRENT_PROJECT_VERSION = 1;
242 | DEBUG_INFORMATION_FORMAT = dwarf;
243 | DEFINES_MODULE = YES;
244 | DYLIB_COMPATIBILITY_VERSION = 1;
245 | DYLIB_CURRENT_VERSION = 1;
246 | DYLIB_INSTALL_NAME_BASE = "@rpath";
247 | ENABLE_STRICT_OBJC_MSGSEND = YES;
248 | GCC_NO_COMMON_BLOCKS = YES;
249 | INFOPLIST_FILE = "Target Support Files/Pods-Axolotl/Info.plist";
250 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
251 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
252 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
253 | MACH_O_TYPE = staticlib;
254 | MODULEMAP_FILE = "Target Support Files/Pods-Axolotl/Pods-Axolotl.modulemap";
255 | MTL_ENABLE_DEBUG_INFO = YES;
256 | OTHER_LDFLAGS = "";
257 | OTHER_LIBTOOLFLAGS = "";
258 | PODS_ROOT = "$(SRCROOT)";
259 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
260 | PRODUCT_NAME = Pods_Axolotl;
261 | SDKROOT = iphoneos;
262 | SKIP_INSTALL = YES;
263 | TARGETED_DEVICE_FAMILY = "1,2";
264 | VERSIONING_SYSTEM = "apple-generic";
265 | VERSION_INFO_PREFIX = "";
266 | };
267 | name = Debug;
268 | };
269 | 7D144F724433A09597E3476A57631255 /* Debug */ = {
270 | isa = XCBuildConfiguration;
271 | buildSettings = {
272 | ALWAYS_SEARCH_USER_PATHS = NO;
273 | CLANG_ANALYZER_NONNULL = YES;
274 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES;
275 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
276 | CLANG_CXX_LIBRARY = "libc++";
277 | CLANG_ENABLE_MODULES = YES;
278 | CLANG_ENABLE_OBJC_ARC = YES;
279 | CLANG_WARN_BOOL_CONVERSION = YES;
280 | CLANG_WARN_CONSTANT_CONVERSION = YES;
281 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES;
282 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
283 | CLANG_WARN_EMPTY_BODY = YES;
284 | CLANG_WARN_ENUM_CONVERSION = YES;
285 | CLANG_WARN_INFINITE_RECURSION = YES;
286 | CLANG_WARN_INT_CONVERSION = YES;
287 | CLANG_WARN_OBJC_ROOT_CLASS = YES;
288 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
289 | CLANG_WARN_UNREACHABLE_CODE = YES;
290 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
291 | CODE_SIGNING_REQUIRED = NO;
292 | COPY_PHASE_STRIP = NO;
293 | ENABLE_TESTABILITY = YES;
294 | GCC_C_LANGUAGE_STANDARD = gnu99;
295 | GCC_DYNAMIC_NO_PIC = NO;
296 | GCC_OPTIMIZATION_LEVEL = 0;
297 | GCC_PREPROCESSOR_DEFINITIONS = (
298 | "POD_CONFIGURATION_DEBUG=1",
299 | "DEBUG=1",
300 | "$(inherited)",
301 | );
302 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
303 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
304 | GCC_WARN_ABOUT_RETURN_TYPE = YES;
305 | GCC_WARN_UNDECLARED_SELECTOR = YES;
306 | GCC_WARN_UNINITIALIZED_AUTOS = YES;
307 | GCC_WARN_UNUSED_FUNCTION = YES;
308 | GCC_WARN_UNUSED_VARIABLE = YES;
309 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
310 | ONLY_ACTIVE_ARCH = YES;
311 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/;
312 | STRIP_INSTALLED_PRODUCT = NO;
313 | SYMROOT = "${SRCROOT}/../build";
314 | };
315 | name = Debug;
316 | };
317 | 9A02DF9BB42AC5BBFBADAAA3A472B23A /* Release */ = {
318 | isa = XCBuildConfiguration;
319 | baseConfigurationReference = 590C6D02081C1AA28582AB9EC7F566FF /* Pods-Axolotl.release.xcconfig */;
320 | buildSettings = {
321 | CODE_SIGN_IDENTITY = "";
322 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
323 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
324 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
325 | CURRENT_PROJECT_VERSION = 1;
326 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
327 | DEFINES_MODULE = YES;
328 | DYLIB_COMPATIBILITY_VERSION = 1;
329 | DYLIB_CURRENT_VERSION = 1;
330 | DYLIB_INSTALL_NAME_BASE = "@rpath";
331 | ENABLE_STRICT_OBJC_MSGSEND = YES;
332 | GCC_NO_COMMON_BLOCKS = YES;
333 | INFOPLIST_FILE = "Target Support Files/Pods-Axolotl/Info.plist";
334 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
335 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
336 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
337 | MACH_O_TYPE = staticlib;
338 | MODULEMAP_FILE = "Target Support Files/Pods-Axolotl/Pods-Axolotl.modulemap";
339 | MTL_ENABLE_DEBUG_INFO = NO;
340 | OTHER_LDFLAGS = "";
341 | OTHER_LIBTOOLFLAGS = "";
342 | PODS_ROOT = "$(SRCROOT)";
343 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
344 | PRODUCT_NAME = Pods_Axolotl;
345 | SDKROOT = iphoneos;
346 | SKIP_INSTALL = YES;
347 | TARGETED_DEVICE_FAMILY = "1,2";
348 | VERSIONING_SYSTEM = "apple-generic";
349 | VERSION_INFO_PREFIX = "";
350 | };
351 | name = Release;
352 | };
353 | /* End XCBuildConfiguration section */
354 |
355 | /* Begin XCConfigurationList section */
356 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = {
357 | isa = XCConfigurationList;
358 | buildConfigurations = (
359 | 7D144F724433A09597E3476A57631255 /* Debug */,
360 | 1A41B15D3AA834993ADDD808FA9D8764 /* Release */,
361 | );
362 | defaultConfigurationIsVisible = 0;
363 | defaultConfigurationName = Release;
364 | };
365 | 9F097DF3D294291AF56588EB5C0D25ED /* Build configuration list for PBXNativeTarget "Pods-Axolotl" */ = {
366 | isa = XCConfigurationList;
367 | buildConfigurations = (
368 | 4226B25A00447FA43A40E26974B3B9A0 /* Debug */,
369 | 9A02DF9BB42AC5BBFBADAAA3A472B23A /* Release */,
370 | );
371 | defaultConfigurationIsVisible = 0;
372 | defaultConfigurationName = Release;
373 | };
374 | /* End XCConfigurationList section */
375 | };
376 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
377 | }
378 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/Pods.xcodeproj/xcuserdata/gregoryfoster.xcuserdatad/xcschemes/Pods-Axolotl.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
34 |
35 |
45 |
46 |
52 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
66 |
67 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/Pods.xcodeproj/xcuserdata/gregoryfoster.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | Pods-Axolotl.xcscheme
8 |
9 | isShown
10 |
11 |
12 |
13 | SuppressBuildableAutocreation
14 |
15 | AC0C75829B03443875350B11649AF5AE
16 |
17 | primary
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Realm Inc.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Resources:
--------------------------------------------------------------------------------
1 | Versions/Current/Resources
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/SwiftLintFramework:
--------------------------------------------------------------------------------
1 | Versions/Current/SwiftLintFramework
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/Commandant.framework/Commandant:
--------------------------------------------------------------------------------
1 | Versions/Current/Commandant
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/Commandant.framework/Resources:
--------------------------------------------------------------------------------
1 | Versions/Current/Resources
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/Commandant.framework/Versions/A/Commandant:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomasreimers/axolotl/c43d0a60fee659cdd075f7330a010fa6030bb6c2/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/Commandant.framework/Versions/A/Commandant
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/Commandant.framework/Versions/A/Resources/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | BuildMachineOSBuild
6 | 16F73
7 | CFBundleDevelopmentRegion
8 | en
9 | CFBundleExecutable
10 | Commandant
11 | CFBundleIdentifier
12 | org.carthage.Commandant
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | Commandant
17 | CFBundlePackageType
18 | FMWK
19 | CFBundleShortVersionString
20 | 0.12.0
21 | CFBundleSignature
22 | ????
23 | CFBundleSupportedPlatforms
24 |
25 | MacOSX
26 |
27 | CFBundleVersion
28 | 1
29 | DTCompiler
30 | com.apple.compilers.llvm.clang.1_0
31 | DTPlatformBuild
32 | 8E3004b
33 | DTPlatformVersion
34 | GM
35 | DTSDKBuild
36 | 16E185
37 | DTSDKName
38 | macosx10.12
39 | DTXcode
40 | 0833
41 | DTXcodeBuild
42 | 8E3004b
43 | NSHumanReadableCopyright
44 | Copyright © 2014 Carthage. All rights reserved.
45 |
46 |
47 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/Commandant.framework/Versions/Current:
--------------------------------------------------------------------------------
1 | A
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/Result.framework/Resources:
--------------------------------------------------------------------------------
1 | Versions/Current/Resources
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/Result.framework/Result:
--------------------------------------------------------------------------------
1 | Versions/Current/Result
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/Result.framework/Versions/A/Resources/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | BuildMachineOSBuild
6 | 16F73
7 | CFBundleDevelopmentRegion
8 | en
9 | CFBundleExecutable
10 | Result
11 | CFBundleIdentifier
12 | com.antitypical.Result
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | Result
17 | CFBundlePackageType
18 | FMWK
19 | CFBundleShortVersionString
20 | 3.2.1
21 | CFBundleSignature
22 | ????
23 | CFBundleSupportedPlatforms
24 |
25 | MacOSX
26 |
27 | CFBundleVersion
28 | 1
29 | DTCompiler
30 | com.apple.compilers.llvm.clang.1_0
31 | DTPlatformBuild
32 | 8E3004b
33 | DTPlatformVersion
34 | GM
35 | DTSDKBuild
36 | 16E185
37 | DTSDKName
38 | macosx10.12
39 | DTXcode
40 | 0833
41 | DTXcodeBuild
42 | 8E3004b
43 | NSHumanReadableCopyright
44 | Copyright © 2015 Rob Rix. All rights reserved.
45 |
46 |
47 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/Result.framework/Versions/A/Result:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomasreimers/axolotl/c43d0a60fee659cdd075f7330a010fa6030bb6c2/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/Result.framework/Versions/A/Result
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/Result.framework/Versions/Current:
--------------------------------------------------------------------------------
1 | A
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/SWXMLHash.framework/Resources:
--------------------------------------------------------------------------------
1 | Versions/Current/Resources
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/SWXMLHash.framework/SWXMLHash:
--------------------------------------------------------------------------------
1 | Versions/Current/SWXMLHash
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/SWXMLHash.framework/Versions/A/Resources/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | BuildMachineOSBuild
6 | 16F73
7 | CFBundleDevelopmentRegion
8 | en
9 | CFBundleExecutable
10 | SWXMLHash
11 | CFBundleIdentifier
12 | drmohundro.SWXMLHash
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | SWXMLHash
17 | CFBundlePackageType
18 | FMWK
19 | CFBundleShortVersionString
20 | 2.0
21 | CFBundleSignature
22 | ????
23 | CFBundleSupportedPlatforms
24 |
25 | MacOSX
26 |
27 | CFBundleVersion
28 | 1
29 | DTCompiler
30 | com.apple.compilers.llvm.clang.1_0
31 | DTPlatformBuild
32 | 8E3004b
33 | DTPlatformVersion
34 | GM
35 | DTSDKBuild
36 | 16E185
37 | DTSDKName
38 | macosx10.12
39 | DTXcode
40 | 0833
41 | DTXcodeBuild
42 | 8E3004b
43 | UIDeviceFamily
44 |
45 | 1
46 | 2
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/SWXMLHash.framework/Versions/A/SWXMLHash:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomasreimers/axolotl/c43d0a60fee659cdd075f7330a010fa6030bb6c2/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/SWXMLHash.framework/Versions/A/SWXMLHash
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/SWXMLHash.framework/Versions/Current:
--------------------------------------------------------------------------------
1 | A
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/SourceKittenFramework.framework/Resources:
--------------------------------------------------------------------------------
1 | Versions/Current/Resources
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/SourceKittenFramework.framework/SourceKittenFramework:
--------------------------------------------------------------------------------
1 | Versions/Current/SourceKittenFramework
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/SourceKittenFramework.framework/Versions/A/Resources/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | BuildMachineOSBuild
6 | 16F73
7 | CFBundleDevelopmentRegion
8 | en
9 | CFBundleExecutable
10 | SourceKittenFramework
11 | CFBundleIdentifier
12 | com.sourcekitten.SourceKittenFramework
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | SourceKittenFramework
17 | CFBundlePackageType
18 | FMWK
19 | CFBundleShortVersionString
20 | 0.17.6
21 | CFBundleSignature
22 | ????
23 | CFBundleSupportedPlatforms
24 |
25 | MacOSX
26 |
27 | CFBundleVersion
28 | 1
29 | DTCompiler
30 | com.apple.compilers.llvm.clang.1_0
31 | DTPlatformBuild
32 | 8E3004b
33 | DTPlatformVersion
34 | GM
35 | DTSDKBuild
36 | 16E185
37 | DTSDKName
38 | macosx10.12
39 | DTXcode
40 | 0833
41 | DTXcodeBuild
42 | 8E3004b
43 | NSHumanReadableCopyright
44 | Copyright © 2015 SourceKitten. All rights reserved.
45 |
46 |
47 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/SourceKittenFramework.framework/Versions/A/SourceKittenFramework:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomasreimers/axolotl/c43d0a60fee659cdd075f7330a010fa6030bb6c2/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/SourceKittenFramework.framework/Versions/A/SourceKittenFramework
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/SourceKittenFramework.framework/Versions/Current:
--------------------------------------------------------------------------------
1 | A
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/SwiftyTextTable.framework/Resources:
--------------------------------------------------------------------------------
1 | Versions/Current/Resources
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/SwiftyTextTable.framework/SwiftyTextTable:
--------------------------------------------------------------------------------
1 | Versions/Current/SwiftyTextTable
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/SwiftyTextTable.framework/Versions/A/Resources/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | BuildMachineOSBuild
6 | 16F73
7 | CFBundleDevelopmentRegion
8 | en
9 | CFBundleExecutable
10 | SwiftyTextTable
11 | CFBundleIdentifier
12 | com.scotthoyt.SwiftyTextTable
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | SwiftyTextTable
17 | CFBundlePackageType
18 | FMWK
19 | CFBundleShortVersionString
20 | 0.1.0
21 | CFBundleSignature
22 | ????
23 | CFBundleSupportedPlatforms
24 |
25 | MacOSX
26 |
27 | CFBundleVersion
28 | 1
29 | DTCompiler
30 | com.apple.compilers.llvm.clang.1_0
31 | DTPlatformBuild
32 | 8E3004b
33 | DTPlatformVersion
34 | GM
35 | DTSDKBuild
36 | 16E185
37 | DTSDKName
38 | macosx10.12
39 | DTXcode
40 | 0833
41 | DTXcodeBuild
42 | 8E3004b
43 | NSHumanReadableCopyright
44 | Copyright © 2016 Scott Hoyt. All rights reserved.
45 |
46 |
47 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/SwiftyTextTable.framework/Versions/A/SwiftyTextTable:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomasreimers/axolotl/c43d0a60fee659cdd075f7330a010fa6030bb6c2/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/SwiftyTextTable.framework/Versions/A/SwiftyTextTable
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/SwiftyTextTable.framework/Versions/Current:
--------------------------------------------------------------------------------
1 | A
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/Yams.framework/Resources:
--------------------------------------------------------------------------------
1 | Versions/Current/Resources
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/Yams.framework/Versions/A/Resources/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | BuildMachineOSBuild
6 | 16F73
7 | CFBundleDevelopmentRegion
8 | en
9 | CFBundleExecutable
10 | Yams
11 | CFBundleIdentifier
12 | Yams
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | Yams
17 | CFBundlePackageType
18 | FMWK
19 | CFBundleShortVersionString
20 | 0.3.2
21 | CFBundleSignature
22 | ????
23 | CFBundleSupportedPlatforms
24 |
25 | MacOSX
26 |
27 | CFBundleVersion
28 | 1
29 | DTCompiler
30 | com.apple.compilers.llvm.clang.1_0
31 | DTPlatformBuild
32 | 8E3004b
33 | DTPlatformVersion
34 | GM
35 | DTSDKBuild
36 | 16E185
37 | DTSDKName
38 | macosx10.12
39 | DTXcode
40 | 0833
41 | DTXcodeBuild
42 | 8E3004b
43 |
44 |
45 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/Yams.framework/Versions/A/Yams:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomasreimers/axolotl/c43d0a60fee659cdd075f7330a010fa6030bb6c2/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/Yams.framework/Versions/A/Yams
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/Yams.framework/Versions/Current:
--------------------------------------------------------------------------------
1 | A
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/Yams.framework/Yams:
--------------------------------------------------------------------------------
1 | Versions/Current/Yams
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/libswiftCore.dylib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomasreimers/axolotl/c43d0a60fee659cdd075f7330a010fa6030bb6c2/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/libswiftCore.dylib
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/libswiftCoreGraphics.dylib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomasreimers/axolotl/c43d0a60fee659cdd075f7330a010fa6030bb6c2/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/libswiftCoreGraphics.dylib
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/libswiftDarwin.dylib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomasreimers/axolotl/c43d0a60fee659cdd075f7330a010fa6030bb6c2/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/libswiftDarwin.dylib
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/libswiftDispatch.dylib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomasreimers/axolotl/c43d0a60fee659cdd075f7330a010fa6030bb6c2/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/libswiftDispatch.dylib
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/libswiftFoundation.dylib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomasreimers/axolotl/c43d0a60fee659cdd075f7330a010fa6030bb6c2/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/libswiftFoundation.dylib
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/libswiftIOKit.dylib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomasreimers/axolotl/c43d0a60fee659cdd075f7330a010fa6030bb6c2/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/libswiftIOKit.dylib
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/libswiftObjectiveC.dylib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomasreimers/axolotl/c43d0a60fee659cdd075f7330a010fa6030bb6c2/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Frameworks/libswiftObjectiveC.dylib
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/Resources/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | BuildMachineOSBuild
6 | 16F73
7 | CFBundleDevelopmentRegion
8 | en
9 | CFBundleExecutable
10 | SwiftLintFramework
11 | CFBundleIdentifier
12 | io.realm.SwiftLintFramework
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | SwiftLintFramework
17 | CFBundlePackageType
18 | FMWK
19 | CFBundleShortVersionString
20 | 0.20.1
21 | CFBundleSignature
22 | ????
23 | CFBundleSupportedPlatforms
24 |
25 | MacOSX
26 |
27 | CFBundleVersion
28 | 1
29 | DTCompiler
30 | com.apple.compilers.llvm.clang.1_0
31 | DTPlatformBuild
32 | 8E3004b
33 | DTPlatformVersion
34 | GM
35 | DTSDKBuild
36 | 16E185
37 | DTSDKName
38 | macosx10.12
39 | DTXcode
40 | 0833
41 | DTXcodeBuild
42 | 8E3004b
43 | NSHumanReadableCopyright
44 | Copyright © 2015 Realm. All rights reserved.
45 |
46 |
47 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/SwiftLintFramework:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomasreimers/axolotl/c43d0a60fee659cdd075f7330a010fa6030bb6c2/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/A/SwiftLintFramework
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/SwiftLintFramework.framework/Versions/Current:
--------------------------------------------------------------------------------
1 | A
--------------------------------------------------------------------------------
/app/Axolotl/Pods/SwiftLint/swiftlint:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomasreimers/axolotl/c43d0a60fee659cdd075f7330a010fa6030bb6c2/app/Axolotl/Pods/SwiftLint/swiftlint
--------------------------------------------------------------------------------
/app/Axolotl/Pods/Target Support Files/Pods-Axolotl/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/Target Support Files/Pods-Axolotl/Pods-Axolotl-acknowledgements.markdown:
--------------------------------------------------------------------------------
1 | # Acknowledgements
2 | This application makes use of the following third party libraries:
3 |
4 | ## SwiftLint
5 |
6 | The MIT License (MIT)
7 |
8 | Copyright (c) 2015 Realm Inc.
9 |
10 | Permission is hereby granted, free of charge, to any person obtaining a copy
11 | of this software and associated documentation files (the "Software"), to deal
12 | in the Software without restriction, including without limitation the rights
13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | copies of the Software, and to permit persons to whom the Software is
15 | furnished to do so, subject to the following conditions:
16 |
17 | The above copyright notice and this permission notice shall be included in all
18 | copies or substantial portions of the Software.
19 |
20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | SOFTWARE.
27 |
28 | Generated by CocoaPods - https://cocoapods.org
29 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/Target Support Files/Pods-Axolotl/Pods-Axolotl-acknowledgements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreferenceSpecifiers
6 |
7 |
8 | FooterText
9 | This application makes use of the following third party libraries:
10 | Title
11 | Acknowledgements
12 | Type
13 | PSGroupSpecifier
14 |
15 |
16 | FooterText
17 | The MIT License (MIT)
18 |
19 | Copyright (c) 2015 Realm Inc.
20 |
21 | Permission is hereby granted, free of charge, to any person obtaining a copy
22 | of this software and associated documentation files (the "Software"), to deal
23 | in the Software without restriction, including without limitation the rights
24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
25 | copies of the Software, and to permit persons to whom the Software is
26 | furnished to do so, subject to the following conditions:
27 |
28 | The above copyright notice and this permission notice shall be included in all
29 | copies or substantial portions of the Software.
30 |
31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
37 | SOFTWARE.
38 |
39 | License
40 | MIT
41 | Title
42 | SwiftLint
43 | Type
44 | PSGroupSpecifier
45 |
46 |
47 | FooterText
48 | Generated by CocoaPods - https://cocoapods.org
49 | Title
50 |
51 | Type
52 | PSGroupSpecifier
53 |
54 |
55 | StringsTable
56 | Acknowledgements
57 | Title
58 | Acknowledgements
59 |
60 |
61 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/Target Support Files/Pods-Axolotl/Pods-Axolotl-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_Axolotl : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_Axolotl
5 | @end
6 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/Target Support Files/Pods-Axolotl/Pods-Axolotl-frameworks.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 |
4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
6 |
7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}"
8 |
9 | install_framework()
10 | {
11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then
12 | local source="${BUILT_PRODUCTS_DIR}/$1"
13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then
14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")"
15 | elif [ -r "$1" ]; then
16 | local source="$1"
17 | fi
18 |
19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
20 |
21 | if [ -L "${source}" ]; then
22 | echo "Symlinked..."
23 | source="$(readlink "${source}")"
24 | fi
25 |
26 | # use filter instead of exclude so missing patterns dont' throw errors
27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\""
28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}"
29 |
30 | local basename
31 | basename="$(basename -s .framework "$1")"
32 | binary="${destination}/${basename}.framework/${basename}"
33 | if ! [ -r "$binary" ]; then
34 | binary="${destination}/${basename}"
35 | fi
36 |
37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device
38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then
39 | strip_invalid_archs "$binary"
40 | fi
41 |
42 | # Resign the code if required by the build settings to avoid unstable apps
43 | code_sign_if_enabled "${destination}/$(basename "$1")"
44 |
45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then
47 | local swift_runtime_libs
48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]})
49 | for lib in $swift_runtime_libs; do
50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
52 | code_sign_if_enabled "${destination}/${lib}"
53 | done
54 | fi
55 | }
56 |
57 | # Signs a framework with the provided identity
58 | code_sign_if_enabled() {
59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then
60 | # Use the current code_sign_identitiy
61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
62 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'"
63 |
64 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
65 | code_sign_cmd="$code_sign_cmd &"
66 | fi
67 | echo "$code_sign_cmd"
68 | eval "$code_sign_cmd"
69 | fi
70 | }
71 |
72 | # Strip invalid architectures
73 | strip_invalid_archs() {
74 | binary="$1"
75 | # Get architectures for current file
76 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)"
77 | stripped=""
78 | for arch in $archs; do
79 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then
80 | # Strip non-valid architectures in-place
81 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1
82 | stripped="$stripped $arch"
83 | fi
84 | done
85 | if [[ "$stripped" ]]; then
86 | echo "Stripped $binary of architectures:$stripped"
87 | fi
88 | }
89 |
90 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
91 | wait
92 | fi
93 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/Target Support Files/Pods-Axolotl/Pods-Axolotl-resources.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 |
4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
5 |
6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt
7 | > "$RESOURCES_TO_COPY"
8 |
9 | XCASSET_FILES=()
10 |
11 | case "${TARGETED_DEVICE_FAMILY}" in
12 | 1,2)
13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone"
14 | ;;
15 | 1)
16 | TARGET_DEVICE_ARGS="--target-device iphone"
17 | ;;
18 | 2)
19 | TARGET_DEVICE_ARGS="--target-device ipad"
20 | ;;
21 | 3)
22 | TARGET_DEVICE_ARGS="--target-device tv"
23 | ;;
24 | 4)
25 | TARGET_DEVICE_ARGS="--target-device watch"
26 | ;;
27 | *)
28 | TARGET_DEVICE_ARGS="--target-device mac"
29 | ;;
30 | esac
31 |
32 | install_resource()
33 | {
34 | if [[ "$1" = /* ]] ; then
35 | RESOURCE_PATH="$1"
36 | else
37 | RESOURCE_PATH="${PODS_ROOT}/$1"
38 | fi
39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then
40 | cat << EOM
41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script.
42 | EOM
43 | exit 1
44 | fi
45 | case $RESOURCE_PATH in
46 | *.storyboard)
47 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}"
48 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
49 | ;;
50 | *.xib)
51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}"
52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
53 | ;;
54 | *.framework)
55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
59 | ;;
60 | *.xcdatamodel)
61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\""
62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom"
63 | ;;
64 | *.xcdatamodeld)
65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\""
66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd"
67 | ;;
68 | *.xcmappingmodel)
69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\""
70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm"
71 | ;;
72 | *.xcassets)
73 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH"
74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE")
75 | ;;
76 | *)
77 | echo "$RESOURCE_PATH"
78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY"
79 | ;;
80 | esac
81 | }
82 |
83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then
86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
88 | fi
89 | rm -f "$RESOURCES_TO_COPY"
90 |
91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ]
92 | then
93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets).
94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d)
95 | while read line; do
96 | if [[ $line != "${PODS_ROOT}*" ]]; then
97 | XCASSET_FILES+=("$line")
98 | fi
99 | done <<<"$OTHER_XCASSETS"
100 |
101 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
102 | fi
103 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/Target Support Files/Pods-Axolotl/Pods-Axolotl-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
14 | FOUNDATION_EXPORT double Pods_AxolotlVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char Pods_AxolotlVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/Target Support Files/Pods-Axolotl/Pods-Axolotl.debug.xcconfig:
--------------------------------------------------------------------------------
1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SwiftLint"
3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/SwiftLint"
5 | PODS_BUILD_DIR = $BUILD_DIR
6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
8 | PODS_ROOT = ${SRCROOT}/Pods
9 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/Target Support Files/Pods-Axolotl/Pods-Axolotl.modulemap:
--------------------------------------------------------------------------------
1 | framework module Pods_Axolotl {
2 | umbrella header "Pods-Axolotl-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/app/Axolotl/Pods/Target Support Files/Pods-Axolotl/Pods-Axolotl.release.xcconfig:
--------------------------------------------------------------------------------
1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SwiftLint"
3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/SwiftLint"
5 | PODS_BUILD_DIR = $BUILD_DIR
6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
8 | PODS_ROOT = ${SRCROOT}/Pods
9 |
--------------------------------------------------------------------------------
/app/axolotl/Axolotl.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 48;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 0F283090807E540E776D52FE /* Pods_Axolotl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C3A71E3FA99C9F87726B685 /* Pods_Axolotl.framework */; };
11 | C8218B951F67824D002B6DF7 /* touch_model.mlmodel in Sources */ = {isa = PBXBuildFile; fileRef = C8218B931F6781F4002B6DF7 /* touch_model.mlmodel */; };
12 | C8218B961F67824F002B6DF7 /* location_model.mlmodel in Sources */ = {isa = PBXBuildFile; fileRef = C8218B941F6781F4002B6DF7 /* location_model.mlmodel */; };
13 | C84961031F5B141600989591 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C84961021F5B141600989591 /* AppDelegate.swift */; };
14 | C84961051F5B141600989591 /* RecorderViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C84961041F5B141600989591 /* RecorderViewController.swift */; };
15 | C84961081F5B141600989591 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C84961061F5B141600989591 /* Main.storyboard */; };
16 | C849610A1F5B141600989591 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C84961091F5B141600989591 /* Assets.xcassets */; };
17 | C849610D1F5B141600989591 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C849610B1F5B141600989591 /* LaunchScreen.storyboard */; };
18 | C84961181F5B141600989591 /* AxolotlTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C84961171F5B141600989591 /* AxolotlTests.swift */; };
19 | C84961231F5B148000989591 /* MotionStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = C84961221F5B148000989591 /* MotionStream.swift */; };
20 | C85A2AC21F677817009839C2 /* PredictorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C85A2AC11F677817009839C2 /* PredictorViewController.swift */; };
21 | /* End PBXBuildFile section */
22 |
23 | /* Begin PBXContainerItemProxy section */
24 | C84961141F5B141600989591 /* PBXContainerItemProxy */ = {
25 | isa = PBXContainerItemProxy;
26 | containerPortal = C84960F71F5B141600989591 /* Project object */;
27 | proxyType = 1;
28 | remoteGlobalIDString = C84960FE1F5B141600989591;
29 | remoteInfo = Axolotl;
30 | };
31 | /* End PBXContainerItemProxy section */
32 |
33 | /* Begin PBXFileReference section */
34 | 08D143D7997AB23CAD0479EC /* Pods-Axolotl.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Axolotl.release.xcconfig"; path = "Pods/Target Support Files/Pods-Axolotl/Pods-Axolotl.release.xcconfig"; sourceTree = ""; };
35 | 3C3A71E3FA99C9F87726B685 /* Pods_Axolotl.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Axolotl.framework; sourceTree = BUILT_PRODUCTS_DIR; };
36 | C8218B931F6781F4002B6DF7 /* touch_model.mlmodel */ = {isa = PBXFileReference; lastKnownFileType = file.mlmodel; name = touch_model.mlmodel; path = ../../../touch_model.mlmodel; sourceTree = ""; };
37 | C8218B941F6781F4002B6DF7 /* location_model.mlmodel */ = {isa = PBXFileReference; lastKnownFileType = file.mlmodel; name = location_model.mlmodel; path = ../../../location_model.mlmodel; sourceTree = ""; };
38 | C84960FF1F5B141600989591 /* Axolotl.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Axolotl.app; sourceTree = BUILT_PRODUCTS_DIR; };
39 | C84961021F5B141600989591 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
40 | C84961041F5B141600989591 /* RecorderViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecorderViewController.swift; sourceTree = ""; };
41 | C84961071F5B141600989591 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
42 | C84961091F5B141600989591 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
43 | C849610C1F5B141600989591 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
44 | C849610E1F5B141600989591 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
45 | C84961131F5B141600989591 /* AxolotlTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AxolotlTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
46 | C84961171F5B141600989591 /* AxolotlTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AxolotlTests.swift; sourceTree = ""; };
47 | C84961191F5B141600989591 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
48 | C84961221F5B148000989591 /* MotionStream.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MotionStream.swift; sourceTree = ""; };
49 | C85A2AC11F677817009839C2 /* PredictorViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PredictorViewController.swift; sourceTree = ""; };
50 | E44947EAE030720EF7524F66 /* Pods-Axolotl.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Axolotl.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Axolotl/Pods-Axolotl.debug.xcconfig"; sourceTree = ""; };
51 | /* End PBXFileReference section */
52 |
53 | /* Begin PBXFrameworksBuildPhase section */
54 | C84960FC1F5B141600989591 /* Frameworks */ = {
55 | isa = PBXFrameworksBuildPhase;
56 | buildActionMask = 2147483647;
57 | files = (
58 | 0F283090807E540E776D52FE /* Pods_Axolotl.framework in Frameworks */,
59 | );
60 | runOnlyForDeploymentPostprocessing = 0;
61 | };
62 | C84961101F5B141600989591 /* Frameworks */ = {
63 | isa = PBXFrameworksBuildPhase;
64 | buildActionMask = 2147483647;
65 | files = (
66 | );
67 | runOnlyForDeploymentPostprocessing = 0;
68 | };
69 | /* End PBXFrameworksBuildPhase section */
70 |
71 | /* Begin PBXGroup section */
72 | 5C7607281FBDA7CEAE814C03 /* Frameworks */ = {
73 | isa = PBXGroup;
74 | children = (
75 | 3C3A71E3FA99C9F87726B685 /* Pods_Axolotl.framework */,
76 | );
77 | name = Frameworks;
78 | sourceTree = "";
79 | };
80 | C84960F61F5B141600989591 = {
81 | isa = PBXGroup;
82 | children = (
83 | C84961011F5B141600989591 /* Axolotl */,
84 | C84961161F5B141600989591 /* AxolotlTests */,
85 | C84961001F5B141600989591 /* Products */,
86 | FD8F8270E3ADCA77A4FC84B9 /* Pods */,
87 | 5C7607281FBDA7CEAE814C03 /* Frameworks */,
88 | );
89 | sourceTree = "";
90 | };
91 | C84961001F5B141600989591 /* Products */ = {
92 | isa = PBXGroup;
93 | children = (
94 | C84960FF1F5B141600989591 /* Axolotl.app */,
95 | C84961131F5B141600989591 /* AxolotlTests.xctest */,
96 | );
97 | name = Products;
98 | sourceTree = "";
99 | };
100 | C84961011F5B141600989591 /* Axolotl */ = {
101 | isa = PBXGroup;
102 | children = (
103 | C84961021F5B141600989591 /* AppDelegate.swift */,
104 | C84961041F5B141600989591 /* RecorderViewController.swift */,
105 | C85A2AC11F677817009839C2 /* PredictorViewController.swift */,
106 | C84961221F5B148000989591 /* MotionStream.swift */,
107 | C84961061F5B141600989591 /* Main.storyboard */,
108 | C84961091F5B141600989591 /* Assets.xcassets */,
109 | C849610B1F5B141600989591 /* LaunchScreen.storyboard */,
110 | C849610E1F5B141600989591 /* Info.plist */,
111 | C8218B941F6781F4002B6DF7 /* location_model.mlmodel */,
112 | C8218B931F6781F4002B6DF7 /* touch_model.mlmodel */,
113 | );
114 | path = Axolotl;
115 | sourceTree = "";
116 | };
117 | C84961161F5B141600989591 /* AxolotlTests */ = {
118 | isa = PBXGroup;
119 | children = (
120 | C84961171F5B141600989591 /* AxolotlTests.swift */,
121 | C84961191F5B141600989591 /* Info.plist */,
122 | );
123 | path = AxolotlTests;
124 | sourceTree = "";
125 | };
126 | FD8F8270E3ADCA77A4FC84B9 /* Pods */ = {
127 | isa = PBXGroup;
128 | children = (
129 | E44947EAE030720EF7524F66 /* Pods-Axolotl.debug.xcconfig */,
130 | 08D143D7997AB23CAD0479EC /* Pods-Axolotl.release.xcconfig */,
131 | );
132 | name = Pods;
133 | sourceTree = "";
134 | };
135 | /* End PBXGroup section */
136 |
137 | /* Begin PBXNativeTarget section */
138 | C84960FE1F5B141600989591 /* Axolotl */ = {
139 | isa = PBXNativeTarget;
140 | buildConfigurationList = C849611C1F5B141600989591 /* Build configuration list for PBXNativeTarget "Axolotl" */;
141 | buildPhases = (
142 | CE14FA27A66FC15B7FB89382 /* [CP] Check Pods Manifest.lock */,
143 | C84961241F5B14A800989591 /* Swift Lint */,
144 | C84960FB1F5B141600989591 /* Sources */,
145 | C84960FC1F5B141600989591 /* Frameworks */,
146 | C84960FD1F5B141600989591 /* Resources */,
147 | C275797B4A2AE52B3F57DBE8 /* [CP] Embed Pods Frameworks */,
148 | 9B71515A31CC6F3DA1603CDF /* [CP] Copy Pods Resources */,
149 | );
150 | buildRules = (
151 | );
152 | dependencies = (
153 | );
154 | name = Axolotl;
155 | productName = Axolotl;
156 | productReference = C84960FF1F5B141600989591 /* Axolotl.app */;
157 | productType = "com.apple.product-type.application";
158 | };
159 | C84961121F5B141600989591 /* AxolotlTests */ = {
160 | isa = PBXNativeTarget;
161 | buildConfigurationList = C849611F1F5B141600989591 /* Build configuration list for PBXNativeTarget "AxolotlTests" */;
162 | buildPhases = (
163 | C849610F1F5B141600989591 /* Sources */,
164 | C84961101F5B141600989591 /* Frameworks */,
165 | C84961111F5B141600989591 /* Resources */,
166 | );
167 | buildRules = (
168 | );
169 | dependencies = (
170 | C84961151F5B141600989591 /* PBXTargetDependency */,
171 | );
172 | name = AxolotlTests;
173 | productName = AxolotlTests;
174 | productReference = C84961131F5B141600989591 /* AxolotlTests.xctest */;
175 | productType = "com.apple.product-type.bundle.unit-test";
176 | };
177 | /* End PBXNativeTarget section */
178 |
179 | /* Begin PBXProject section */
180 | C84960F71F5B141600989591 /* Project object */ = {
181 | isa = PBXProject;
182 | attributes = {
183 | LastSwiftUpdateCheck = 0900;
184 | LastUpgradeCheck = 0900;
185 | ORGANIZATIONNAME = "Greg M Foster";
186 | TargetAttributes = {
187 | C84960FE1F5B141600989591 = {
188 | CreatedOnToolsVersion = 9.0;
189 | ProvisioningStyle = Automatic;
190 | };
191 | C84961121F5B141600989591 = {
192 | CreatedOnToolsVersion = 9.0;
193 | ProvisioningStyle = Automatic;
194 | TestTargetID = C84960FE1F5B141600989591;
195 | };
196 | };
197 | };
198 | buildConfigurationList = C84960FA1F5B141600989591 /* Build configuration list for PBXProject "Axolotl" */;
199 | compatibilityVersion = "Xcode 8.0";
200 | developmentRegion = en;
201 | hasScannedForEncodings = 0;
202 | knownRegions = (
203 | en,
204 | Base,
205 | );
206 | mainGroup = C84960F61F5B141600989591;
207 | productRefGroup = C84961001F5B141600989591 /* Products */;
208 | projectDirPath = "";
209 | projectRoot = "";
210 | targets = (
211 | C84960FE1F5B141600989591 /* Axolotl */,
212 | C84961121F5B141600989591 /* AxolotlTests */,
213 | );
214 | };
215 | /* End PBXProject section */
216 |
217 | /* Begin PBXResourcesBuildPhase section */
218 | C84960FD1F5B141600989591 /* Resources */ = {
219 | isa = PBXResourcesBuildPhase;
220 | buildActionMask = 2147483647;
221 | files = (
222 | C849610D1F5B141600989591 /* LaunchScreen.storyboard in Resources */,
223 | C849610A1F5B141600989591 /* Assets.xcassets in Resources */,
224 | C84961081F5B141600989591 /* Main.storyboard in Resources */,
225 | );
226 | runOnlyForDeploymentPostprocessing = 0;
227 | };
228 | C84961111F5B141600989591 /* Resources */ = {
229 | isa = PBXResourcesBuildPhase;
230 | buildActionMask = 2147483647;
231 | files = (
232 | );
233 | runOnlyForDeploymentPostprocessing = 0;
234 | };
235 | /* End PBXResourcesBuildPhase section */
236 |
237 | /* Begin PBXShellScriptBuildPhase section */
238 | 9B71515A31CC6F3DA1603CDF /* [CP] Copy Pods Resources */ = {
239 | isa = PBXShellScriptBuildPhase;
240 | buildActionMask = 2147483647;
241 | files = (
242 | );
243 | inputPaths = (
244 | );
245 | name = "[CP] Copy Pods Resources";
246 | outputPaths = (
247 | );
248 | runOnlyForDeploymentPostprocessing = 0;
249 | shellPath = /bin/sh;
250 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Axolotl/Pods-Axolotl-resources.sh\"\n";
251 | showEnvVarsInLog = 0;
252 | };
253 | C275797B4A2AE52B3F57DBE8 /* [CP] Embed Pods Frameworks */ = {
254 | isa = PBXShellScriptBuildPhase;
255 | buildActionMask = 2147483647;
256 | files = (
257 | );
258 | inputPaths = (
259 | );
260 | name = "[CP] Embed Pods Frameworks";
261 | outputPaths = (
262 | );
263 | runOnlyForDeploymentPostprocessing = 0;
264 | shellPath = /bin/sh;
265 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Axolotl/Pods-Axolotl-frameworks.sh\"\n";
266 | showEnvVarsInLog = 0;
267 | };
268 | C84961241F5B14A800989591 /* Swift Lint */ = {
269 | isa = PBXShellScriptBuildPhase;
270 | buildActionMask = 2147483647;
271 | files = (
272 | );
273 | inputPaths = (
274 | );
275 | name = "Swift Lint";
276 | outputPaths = (
277 | );
278 | runOnlyForDeploymentPostprocessing = 0;
279 | shellPath = /bin/sh;
280 | shellScript = "//\"${PODS_ROOT}/SwiftLint/swiftlint\"";
281 | };
282 | CE14FA27A66FC15B7FB89382 /* [CP] Check Pods Manifest.lock */ = {
283 | isa = PBXShellScriptBuildPhase;
284 | buildActionMask = 2147483647;
285 | files = (
286 | );
287 | inputPaths = (
288 | );
289 | name = "[CP] Check Pods Manifest.lock";
290 | outputPaths = (
291 | );
292 | runOnlyForDeploymentPostprocessing = 0;
293 | shellPath = /bin/sh;
294 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n";
295 | showEnvVarsInLog = 0;
296 | };
297 | /* End PBXShellScriptBuildPhase section */
298 |
299 | /* Begin PBXSourcesBuildPhase section */
300 | C84960FB1F5B141600989591 /* Sources */ = {
301 | isa = PBXSourcesBuildPhase;
302 | buildActionMask = 2147483647;
303 | files = (
304 | C84961051F5B141600989591 /* RecorderViewController.swift in Sources */,
305 | C8218B961F67824F002B6DF7 /* location_model.mlmodel in Sources */,
306 | C8218B951F67824D002B6DF7 /* touch_model.mlmodel in Sources */,
307 | C84961231F5B148000989591 /* MotionStream.swift in Sources */,
308 | C84961031F5B141600989591 /* AppDelegate.swift in Sources */,
309 | C85A2AC21F677817009839C2 /* PredictorViewController.swift in Sources */,
310 | );
311 | runOnlyForDeploymentPostprocessing = 0;
312 | };
313 | C849610F1F5B141600989591 /* Sources */ = {
314 | isa = PBXSourcesBuildPhase;
315 | buildActionMask = 2147483647;
316 | files = (
317 | C84961181F5B141600989591 /* AxolotlTests.swift in Sources */,
318 | );
319 | runOnlyForDeploymentPostprocessing = 0;
320 | };
321 | /* End PBXSourcesBuildPhase section */
322 |
323 | /* Begin PBXTargetDependency section */
324 | C84961151F5B141600989591 /* PBXTargetDependency */ = {
325 | isa = PBXTargetDependency;
326 | target = C84960FE1F5B141600989591 /* Axolotl */;
327 | targetProxy = C84961141F5B141600989591 /* PBXContainerItemProxy */;
328 | };
329 | /* End PBXTargetDependency section */
330 |
331 | /* Begin PBXVariantGroup section */
332 | C84961061F5B141600989591 /* Main.storyboard */ = {
333 | isa = PBXVariantGroup;
334 | children = (
335 | C84961071F5B141600989591 /* Base */,
336 | );
337 | name = Main.storyboard;
338 | sourceTree = "";
339 | };
340 | C849610B1F5B141600989591 /* LaunchScreen.storyboard */ = {
341 | isa = PBXVariantGroup;
342 | children = (
343 | C849610C1F5B141600989591 /* Base */,
344 | );
345 | name = LaunchScreen.storyboard;
346 | sourceTree = "";
347 | };
348 | /* End PBXVariantGroup section */
349 |
350 | /* Begin XCBuildConfiguration section */
351 | C849611A1F5B141600989591 /* Debug */ = {
352 | isa = XCBuildConfiguration;
353 | buildSettings = {
354 | ALWAYS_SEARCH_USER_PATHS = NO;
355 | CLANG_ANALYZER_NONNULL = YES;
356 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
357 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
358 | CLANG_CXX_LIBRARY = "libc++";
359 | CLANG_ENABLE_MODULES = YES;
360 | CLANG_ENABLE_OBJC_ARC = YES;
361 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
362 | CLANG_WARN_BOOL_CONVERSION = YES;
363 | CLANG_WARN_COMMA = YES;
364 | CLANG_WARN_CONSTANT_CONVERSION = YES;
365 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
366 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
367 | CLANG_WARN_EMPTY_BODY = YES;
368 | CLANG_WARN_ENUM_CONVERSION = YES;
369 | CLANG_WARN_INFINITE_RECURSION = YES;
370 | CLANG_WARN_INT_CONVERSION = YES;
371 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
372 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
373 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
374 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
375 | CLANG_WARN_STRICT_PROTOTYPES = YES;
376 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
377 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
378 | CLANG_WARN_UNREACHABLE_CODE = YES;
379 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
380 | CODE_SIGN_IDENTITY = "iPhone Developer";
381 | COPY_PHASE_STRIP = NO;
382 | DEBUG_INFORMATION_FORMAT = dwarf;
383 | ENABLE_STRICT_OBJC_MSGSEND = YES;
384 | ENABLE_TESTABILITY = YES;
385 | GCC_C_LANGUAGE_STANDARD = gnu11;
386 | GCC_DYNAMIC_NO_PIC = NO;
387 | GCC_NO_COMMON_BLOCKS = YES;
388 | GCC_OPTIMIZATION_LEVEL = 0;
389 | GCC_PREPROCESSOR_DEFINITIONS = (
390 | "DEBUG=1",
391 | "$(inherited)",
392 | );
393 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
394 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
395 | GCC_WARN_UNDECLARED_SELECTOR = YES;
396 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
397 | GCC_WARN_UNUSED_FUNCTION = YES;
398 | GCC_WARN_UNUSED_VARIABLE = YES;
399 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
400 | MTL_ENABLE_DEBUG_INFO = YES;
401 | ONLY_ACTIVE_ARCH = YES;
402 | SDKROOT = iphoneos;
403 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
404 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
405 | };
406 | name = Debug;
407 | };
408 | C849611B1F5B141600989591 /* Release */ = {
409 | isa = XCBuildConfiguration;
410 | buildSettings = {
411 | ALWAYS_SEARCH_USER_PATHS = NO;
412 | CLANG_ANALYZER_NONNULL = YES;
413 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
414 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
415 | CLANG_CXX_LIBRARY = "libc++";
416 | CLANG_ENABLE_MODULES = YES;
417 | CLANG_ENABLE_OBJC_ARC = YES;
418 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
419 | CLANG_WARN_BOOL_CONVERSION = YES;
420 | CLANG_WARN_COMMA = YES;
421 | CLANG_WARN_CONSTANT_CONVERSION = YES;
422 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
423 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
424 | CLANG_WARN_EMPTY_BODY = YES;
425 | CLANG_WARN_ENUM_CONVERSION = YES;
426 | CLANG_WARN_INFINITE_RECURSION = YES;
427 | CLANG_WARN_INT_CONVERSION = YES;
428 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
429 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
430 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
431 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
432 | CLANG_WARN_STRICT_PROTOTYPES = YES;
433 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
434 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
435 | CLANG_WARN_UNREACHABLE_CODE = YES;
436 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
437 | CODE_SIGN_IDENTITY = "iPhone Developer";
438 | COPY_PHASE_STRIP = NO;
439 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
440 | ENABLE_NS_ASSERTIONS = NO;
441 | ENABLE_STRICT_OBJC_MSGSEND = YES;
442 | GCC_C_LANGUAGE_STANDARD = gnu11;
443 | GCC_NO_COMMON_BLOCKS = YES;
444 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
445 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
446 | GCC_WARN_UNDECLARED_SELECTOR = YES;
447 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
448 | GCC_WARN_UNUSED_FUNCTION = YES;
449 | GCC_WARN_UNUSED_VARIABLE = YES;
450 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
451 | MTL_ENABLE_DEBUG_INFO = NO;
452 | SDKROOT = iphoneos;
453 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
454 | VALIDATE_PRODUCT = YES;
455 | };
456 | name = Release;
457 | };
458 | C849611D1F5B141600989591 /* Debug */ = {
459 | isa = XCBuildConfiguration;
460 | baseConfigurationReference = E44947EAE030720EF7524F66 /* Pods-Axolotl.debug.xcconfig */;
461 | buildSettings = {
462 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
463 | CODE_SIGN_STYLE = Automatic;
464 | DEVELOPMENT_TEAM = 2V7W69N399;
465 | INFOPLIST_FILE = Axolotl/Info.plist;
466 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
467 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
468 | PRODUCT_BUNDLE_IDENTIFIER = gregmfoster.Axolotl;
469 | PRODUCT_NAME = "$(TARGET_NAME)";
470 | SWIFT_VERSION = 4.0;
471 | TARGETED_DEVICE_FAMILY = "1,2";
472 | };
473 | name = Debug;
474 | };
475 | C849611E1F5B141600989591 /* Release */ = {
476 | isa = XCBuildConfiguration;
477 | baseConfigurationReference = 08D143D7997AB23CAD0479EC /* Pods-Axolotl.release.xcconfig */;
478 | buildSettings = {
479 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
480 | CODE_SIGN_STYLE = Automatic;
481 | DEVELOPMENT_TEAM = 2V7W69N399;
482 | INFOPLIST_FILE = Axolotl/Info.plist;
483 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
484 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
485 | PRODUCT_BUNDLE_IDENTIFIER = gregmfoster.Axolotl;
486 | PRODUCT_NAME = "$(TARGET_NAME)";
487 | SWIFT_VERSION = 4.0;
488 | TARGETED_DEVICE_FAMILY = "1,2";
489 | };
490 | name = Release;
491 | };
492 | C84961201F5B141600989591 /* Debug */ = {
493 | isa = XCBuildConfiguration;
494 | buildSettings = {
495 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
496 | BUNDLE_LOADER = "$(TEST_HOST)";
497 | CODE_SIGN_STYLE = Automatic;
498 | DEVELOPMENT_TEAM = 2V7W69N399;
499 | INFOPLIST_FILE = AxolotlTests/Info.plist;
500 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
501 | PRODUCT_BUNDLE_IDENTIFIER = gregmfoster.AxolotlTests;
502 | PRODUCT_NAME = "$(TARGET_NAME)";
503 | SWIFT_VERSION = 4.0;
504 | TARGETED_DEVICE_FAMILY = "1,2";
505 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Axolotl.app/Axolotl";
506 | };
507 | name = Debug;
508 | };
509 | C84961211F5B141600989591 /* Release */ = {
510 | isa = XCBuildConfiguration;
511 | buildSettings = {
512 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
513 | BUNDLE_LOADER = "$(TEST_HOST)";
514 | CODE_SIGN_STYLE = Automatic;
515 | DEVELOPMENT_TEAM = 2V7W69N399;
516 | INFOPLIST_FILE = AxolotlTests/Info.plist;
517 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
518 | PRODUCT_BUNDLE_IDENTIFIER = gregmfoster.AxolotlTests;
519 | PRODUCT_NAME = "$(TARGET_NAME)";
520 | SWIFT_VERSION = 4.0;
521 | TARGETED_DEVICE_FAMILY = "1,2";
522 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Axolotl.app/Axolotl";
523 | };
524 | name = Release;
525 | };
526 | /* End XCBuildConfiguration section */
527 |
528 | /* Begin XCConfigurationList section */
529 | C84960FA1F5B141600989591 /* Build configuration list for PBXProject "Axolotl" */ = {
530 | isa = XCConfigurationList;
531 | buildConfigurations = (
532 | C849611A1F5B141600989591 /* Debug */,
533 | C849611B1F5B141600989591 /* Release */,
534 | );
535 | defaultConfigurationIsVisible = 0;
536 | defaultConfigurationName = Release;
537 | };
538 | C849611C1F5B141600989591 /* Build configuration list for PBXNativeTarget "Axolotl" */ = {
539 | isa = XCConfigurationList;
540 | buildConfigurations = (
541 | C849611D1F5B141600989591 /* Debug */,
542 | C849611E1F5B141600989591 /* Release */,
543 | );
544 | defaultConfigurationIsVisible = 0;
545 | defaultConfigurationName = Release;
546 | };
547 | C849611F1F5B141600989591 /* Build configuration list for PBXNativeTarget "AxolotlTests" */ = {
548 | isa = XCConfigurationList;
549 | buildConfigurations = (
550 | C84961201F5B141600989591 /* Debug */,
551 | C84961211F5B141600989591 /* Release */,
552 | );
553 | defaultConfigurationIsVisible = 0;
554 | defaultConfigurationName = Release;
555 | };
556 | /* End XCConfigurationList section */
557 | };
558 | rootObject = C84960F71F5B141600989591 /* Project object */;
559 | }
560 |
--------------------------------------------------------------------------------
/app/axolotl/Axolotl.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/axolotl/Axolotl.xcodeproj/project.xcworkspace/xcuserdata/gregoryfoster.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomasreimers/axolotl/c43d0a60fee659cdd075f7330a010fa6030bb6c2/app/axolotl/Axolotl.xcodeproj/project.xcworkspace/xcuserdata/gregoryfoster.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/app/axolotl/Axolotl.xcodeproj/xcuserdata/gregoryfoster.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | Axolotl.xcscheme
8 |
9 | orderHint
10 | 2
11 |
12 |
13 | SuppressBuildableAutocreation
14 |
15 | C84960FE1F5B141600989591
16 |
17 | primary
18 |
19 |
20 | C84961121F5B141600989591
21 |
22 | primary
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/app/axolotl/axolotl/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // Axolotl
4 | //
5 | // Created by Gregory Foster on 9/2/17.
6 | // Copyright © 2017 Greg M Foster. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | @UIApplicationMain
12 | class AppDelegate: UIResponder, UIApplicationDelegate {
13 |
14 | var window: UIWindow?
15 |
16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions
17 | launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
18 | let tabController = UITabBarController()
19 | let recorderViewController = RecorderViewController()
20 | let predictorViewController = PredictorViewController()
21 | tabController.viewControllers = [predictorViewController, recorderViewController]
22 | self.window = UIWindow(frame: UIScreen.main.bounds)
23 | self.window!.rootViewController = tabController
24 | self.window!.backgroundColor = UIColor.white
25 | self.window!.makeKeyAndVisible()
26 | return true
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/app/axolotl/axolotl/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "20x20",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "20x20",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "29x29",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "29x29",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "40x40",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "40x40",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "size" : "60x60",
36 | "scale" : "2x"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "size" : "60x60",
41 | "scale" : "3x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "20x20",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "size" : "20x20",
51 | "scale" : "2x"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "size" : "29x29",
56 | "scale" : "1x"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "size" : "29x29",
61 | "scale" : "2x"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "size" : "40x40",
66 | "scale" : "1x"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "size" : "40x40",
71 | "scale" : "2x"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "size" : "76x76",
76 | "scale" : "1x"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "size" : "76x76",
81 | "scale" : "2x"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "size" : "83.5x83.5",
86 | "scale" : "2x"
87 | }
88 | ],
89 | "info" : {
90 | "version" : 1,
91 | "author" : "xcode"
92 | }
93 | }
--------------------------------------------------------------------------------
/app/axolotl/axolotl/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/app/axolotl/axolotl/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/app/axolotl/axolotl/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchStoryboardName
24 | LaunchScreen
25 | UIMainStoryboardFile
26 | Main
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/app/axolotl/axolotl/MotionStream.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MotionStream.swift
3 | // Axolotl
4 | //
5 | // Created by Gregory Foster on 9/2/17.
6 | // Copyright © 2017 Greg M Foster. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | struct SimpleMoment {
12 | var time: TimeInterval = 0
13 | var xLoc: CGFloat = 0
14 | var yLoc: CGFloat = 0
15 | var zLoc: CGFloat = 0
16 | var point: CGPoint = CGPoint(x: -2, y: -2)
17 | }
18 |
19 | class MotionStream: NSObject {
20 | let bufferLength: Int
21 | var gyroMoments: [SimpleMoment] = []
22 | var accelMoments: [SimpleMoment] = []
23 |
24 | init(bufferLength: Int) {
25 | self.bufferLength = bufferLength
26 | super.init()
27 | }
28 |
29 | func addGyro(time: TimeInterval, xLoc: CGFloat, yLoc: CGFloat, zLoc: CGFloat, point: CGPoint) {
30 | gyroMoments.insert(SimpleMoment(time:time, xLoc:xLoc, yLoc:yLoc, zLoc:zLoc, point:point), at:0)
31 | }
32 |
33 | func addAccel(time: TimeInterval, xLoc: CGFloat, yLoc: CGFloat, zLoc: CGFloat, point: CGPoint) {
34 | accelMoments.insert(SimpleMoment(time:time, xLoc:xLoc, yLoc:yLoc, zLoc:zLoc, point:point), at:0)
35 | }
36 |
37 | func getGyroData() -> [SimpleMoment] {
38 | return gyroMoments
39 | }
40 |
41 | func getAccelData() -> [SimpleMoment] {
42 | return accelMoments
43 | }
44 |
45 | func getGyroAndAccel() -> ([SimpleMoment], [SimpleMoment]) {
46 | return (gyroMoments, accelMoments)
47 | }
48 |
49 | func snapshot(type: String, moments: [SimpleMoment]) {
50 | let fileName = "\(type)_STREAM_\(NSDate().timeIntervalSince1970).txt"
51 | var text = "touch_x, touch_y, sensor_type, time_since_1970, x, y, z\n"
52 | for m in moments {
53 | text += "\(m.point.x), \(m.point.y), \(type), \(m.time), \(m.xLoc), \(m.yLoc), \(m.zLoc)\n"
54 | }
55 |
56 | if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
57 | let path = dir.appendingPathComponent(fileName)
58 | do {
59 | try text.write(to: path, atomically: false, encoding: String.Encoding.utf8)
60 | } catch {/* error handling here */}
61 | print("Wrote \(moments.count) \(type) moments")
62 | }
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/app/axolotl/axolotl/PredictorViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PredictorViewController.swift
3 | // Axolotl
4 | //
5 | // Created by Gregory Foster on 9/11/17.
6 | // Copyright © 2017 Greg M Foster. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import CoreMotion
11 | import CoreML
12 |
13 | class PredictorViewController: UIViewController {
14 |
15 | let manager = CMMotionManager()
16 | let motionStream = MotionStream(bufferLength: 20)
17 | var backgroundTask: UIBackgroundTaskIdentifier = UIBackgroundTaskInvalid
18 | var touchLocation = CGPoint(x: -2, y: -2)
19 | let touchModel = touch_model()
20 | let locationhModel = location_model()
21 |
22 | required init() {
23 | super.init(nibName: nil, bundle: nil)
24 | self.title = "Predict"
25 | }
26 |
27 | required init?(coder aDecoder: NSCoder) {
28 | fatalError("init(coder:) has not been implemented")
29 | }
30 |
31 | override func viewDidLoad() {
32 | super.viewDidLoad()
33 | }
34 |
35 | override func viewDidAppear(_ animated: Bool) {
36 | startMotionUpdates()
37 | }
38 |
39 | override func viewDidDisappear(_ animated: Bool) {
40 | manager.stopGyroUpdates()
41 | manager.stopGyroUpdates()
42 | }
43 |
44 | func startMotionUpdates() {
45 | // Capture gyro data
46 | manager.startGyroUpdates(to: OperationQueue.main, withHandler: {gyroData, _ in
47 | if let data = gyroData {
48 | self.motionStream.addGyro(time: data.timestamp,
49 | xLoc: CGFloat(data.rotationRate.x),
50 | yLoc: CGFloat(data.rotationRate.y),
51 | zLoc: CGFloat(data.rotationRate.z),
52 | point: CGPoint.zero)
53 |
54 | }
55 | })
56 | // Capture accel data
57 | manager.startAccelerometerUpdates(to: OperationQueue.main, withHandler: {accelData, _ in
58 | if let data = accelData {
59 | self.motionStream.addAccel(time: data.timestamp,
60 | xLoc: CGFloat(data.acceleration.x),
61 | yLoc: CGFloat(data.acceleration.y),
62 | zLoc: CGFloat(data.acceleration.z),
63 | point: CGPoint.zero)
64 | }
65 | })
66 | }
67 |
68 | func predict() {
69 | let (gyroData, accelData) = motionStream.getGyroAndAccel()
70 | assert(gyroData.count == accelData.count)
71 |
72 | guard let input = try? MLMultiArray(shape:[120], dataType:.double) else {
73 | fatalError("Unexpected runtime error. MLMultiArray")
74 | }
75 | for index in 0..
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/axolotl/axolotlTests/axolotlTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AxolotlTests.swift
3 | // AxolotlTests
4 | //
5 | // Created by Gregory Foster on 9/2/17.
6 | // Copyright © 2017 Greg M Foster. All rights reserved.
7 | //
8 |
9 | import XCTest
10 | @testable import Axolotl
11 |
12 | class AxolotlTests: XCTestCase {
13 |
14 | override func setUp() {
15 | super.setUp()
16 | // Put setup code here. This method is called before the invocation of each test method in the class.
17 | }
18 |
19 | override func tearDown() {
20 | // Put teardown code here. This method is called after the invocation of each test method in the class.
21 | super.tearDown()
22 | }
23 |
24 | func testExample() {
25 | // This is an example of a functional test case.
26 | // Use XCTAssert and related functions to verify your tests produce the correct results.
27 | }
28 |
29 | func testPerformanceExample() {
30 | // This is an example of a performance test case.
31 | self.measure {
32 | // Put the code you want to measure the time of here.
33 | }
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/data/sample_1/context.txt:
--------------------------------------------------------------------------------
1 | Kathleen holding the phone tapping rapidly.
--------------------------------------------------------------------------------
/data/sample_2/context.txt:
--------------------------------------------------------------------------------
1 | Lyndon holding the phone tapping rapidly.
--------------------------------------------------------------------------------
/data/sample_3/context.txt:
--------------------------------------------------------------------------------
1 | Greg standing and swaying holding the phone with right hand tapping.
--------------------------------------------------------------------------------
/data/sample_4/context.txt:
--------------------------------------------------------------------------------
1 | Greg holding the phone on table left handed tapping.
--------------------------------------------------------------------------------
/data/sample_5/context.txt:
--------------------------------------------------------------------------------
1 | Claudia holding the phone stabilized on table tapping right handed.
--------------------------------------------------------------------------------
/data/sample_6/context.txt:
--------------------------------------------------------------------------------
1 | Stephen holding the phone tapping quickly.
--------------------------------------------------------------------------------
/data/sample_7/context.txt:
--------------------------------------------------------------------------------
1 | Sophie holding phone with two hands tapping with both thumbs not stabilized on table.
--------------------------------------------------------------------------------
/environment.yml:
--------------------------------------------------------------------------------
1 | name: AXOLOTL
2 | dependencies:
3 | - python=2.7.13
4 | - keras
5 | - tensorflow
6 | - coremltools
7 |
--------------------------------------------------------------------------------
/learn_touches.py:
--------------------------------------------------------------------------------
1 | from lib.axolotl import *
2 | import numpy as np
3 | from keras.models import Sequential
4 | from keras.layers import Dense
5 | from sklearn.model_selection import train_test_split
6 |
7 | # config
8 | print_predictions = False
9 |
10 | def train_touch_model(data):
11 | # find windows where not touching
12 | not_touching_windows = get_not_touching_windows(data)
13 | expanded_not_touching_windows = expand_windows_interpolated(data, not_touching_windows)
14 | # find windows where touching
15 | touching_windows = get_touching_windows(data)
16 | expanded_touching_windows = expand_windows_interpolated(data, touching_windows)
17 | # convert to feature vectors
18 | positive_feature_vectors = feature_vectors_from_windows(expanded_touching_windows)
19 | negative_feature_vectors = feature_vectors_from_windows(expanded_not_touching_windows)
20 | # split into input (X) and output (Y) variables
21 | X = np.array(map(np.array, positive_feature_vectors) + map(np.array, negative_feature_vectors))
22 | Y = np.array([1] * len(positive_feature_vectors) + [0] * len(negative_feature_vectors))
23 | # create model
24 | model = Sequential()
25 | model.add(Dense(window_samples * 4, input_dim=window_samples * 6, activation='relu'))
26 | model.add(Dense(window_samples * 2, activation='relu'))
27 | model.add(Dense(window_samples, activation='relu'))
28 | model.add(Dense(1, activation='sigmoid'))
29 | # Compile model
30 | model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
31 | model.fit(X, Y, nb_epoch=40, batch_size=20, verbose=0)
32 | return model
33 |
34 | def learn_touches(accel_file, gyro_file, verbose=True):
35 | # read the data in
36 | data = read_data(accel_file, gyro_file)
37 |
38 | # find windows where not touching
39 | not_touching_windows = get_not_touching_windows(data)
40 | expanded_not_touching_windows = expand_windows_interpolated(data, not_touching_windows)
41 |
42 | # find windows where touching
43 | touching_windows = get_touching_windows(data)
44 | expanded_touching_windows = expand_windows_interpolated(data, touching_windows)
45 |
46 | # convert to feature vectors
47 | positive_feature_vectors = feature_vectors_from_windows(expanded_touching_windows)
48 | negative_feature_vectors = feature_vectors_from_windows(expanded_not_touching_windows)
49 |
50 | # learn
51 | if verbose:
52 | print "Learning..."
53 |
54 | # fix random seed for reproducibility
55 | # seed = 12
56 | # np.random.seed(seed)
57 |
58 | # split into input (X) and output (Y) variables
59 | X = np.array(map(np.array, positive_feature_vectors) + map(np.array, negative_feature_vectors))
60 | Y = np.array([1] * len(positive_feature_vectors) + [0] * len(negative_feature_vectors))
61 |
62 | X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.33)
63 |
64 | # create model
65 | model = Sequential()
66 | model.add(Dense(window_samples * 4, input_dim=window_samples * 6, activation='relu'))
67 | model.add(Dense(window_samples * 2, activation='relu'))
68 | model.add(Dense(window_samples, activation='relu'))
69 | model.add(Dense(1, activation='sigmoid'))
70 |
71 | # Compile model
72 | model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
73 |
74 | # Fit the model
75 | verbosity = 0
76 | if verbose:
77 | verbosity = 1
78 | model.fit(X_train, Y_train, validation_data=(X_test, Y_test), nb_epoch=40, batch_size=20, verbose=verbosity)
79 |
80 | # print predictions
81 | if print_predictions and verbose:
82 | for x_val, y_val in zip(X_test, Y_test):
83 | print y_val, ":", model.predict(np.array([x_val]), verbose=0)
84 |
85 | return dict(zip(model.metrics_names, model.evaluate(X_test, Y_test, verbose=verbosity)))
86 |
87 | if __name__ == "__main__":
88 | learn_touches("data/sample_0/accel.txt", "data/sample_0/gyro.txt")
89 | print ""
90 |
--------------------------------------------------------------------------------
/lib/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomasreimers/axolotl/c43d0a60fee659cdd075f7330a010fa6030bb6c2/lib/__init__.py
--------------------------------------------------------------------------------
/lib/axolotl.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | import csv
3 |
4 | ACCEL_TYPE = "ACCEL"
5 | GYRO_TYPE = "GYRO"
6 |
7 | window_len = 0.2
8 | window_samples = 20
9 |
10 | class ConsecutiveTouchError(Exception):
11 | pass
12 |
13 | #
14 | # Sets the number of samples in a window
15 | #
16 |
17 | def set_window_samples(n):
18 | global window_samples
19 | window_samples = n
20 |
21 | #
22 | # Returns a sorted stream of datum objects from the two files
23 | #
24 |
25 | def read_data(accel_file, gyro_file):
26 | data = []
27 |
28 | for file_path, sensor_type in [(accel_file, ACCEL_TYPE), (gyro_file, GYRO_TYPE)]:
29 | with open(file_path, "rb") as csvfile:
30 | reader = csv.DictReader(csvfile, skipinitialspace=True)
31 | for row in reader:
32 | assert row["sensor_type"] == sensor_type
33 | parsed_row = {
34 | "touch_x": float(row["touch_x"]),
35 | "touch_y": float(row["touch_y"]),
36 | "x": float(row["x"]),
37 | "y": float(row["y"]),
38 | "z": float(row["z"]),
39 | "time": float(row["time_since_1970"]),
40 | "type": row["sensor_type"]
41 | }
42 | data.append(parsed_row)
43 |
44 | data.sort(key=lambda x: x["time"])
45 |
46 | return data
47 |
48 | #
49 | # Returns a list of as many windows as possible, with starts at least min_start_distance apart (in seconds)
50 | #
51 |
52 | def get_all_windows(data, min_start_distance=0.01):
53 | g_time = [datum['time'] for datum in data]
54 |
55 | skip_to_time = 0
56 | windows = []
57 | for ii in xrange(len(g_time)):
58 | # skip data so windows don't overlap
59 | if g_time[ii] < skip_to_time:
60 | continue
61 |
62 | # find the end of the window
63 | for jj in xrange(ii,len(g_time)):
64 | # break if the window is of the correct length
65 | if g_time[jj] - g_time[ii] > window_len:
66 | windows.append((ii, jj + 1)) # windows are of the form [start, stop)
67 | skip_to_time = g_time[ii] + min_start_distance
68 | break
69 |
70 | return windows
71 |
72 | #
73 | # Returns a list of windows with no touching samples in the form [start, stop)
74 | # where start and stop are indicies in the global data array
75 | #
76 |
77 | def get_not_touching_windows(data):
78 | g_time = [datum['time'] for datum in data]
79 | g_touch_x = [datum['touch_x'] for datum in data]
80 |
81 | not_touching_windows = []
82 | skip_to = 0
83 | for ii in xrange(len(g_time)):
84 | # skip data so windows don't overlap
85 | if ii < skip_to:
86 | continue
87 |
88 | # find the end of the window
89 | for jj in xrange(ii,len(g_time)):
90 | # break on touches
91 | if g_touch_x[jj] != -2:
92 | break
93 |
94 | # break if the window is of the correct length
95 | if g_time[jj] - g_time[ii] > window_len:
96 | not_touching_windows.append((ii, jj + 1)) # windows are of the form [start, stop)
97 | skip_to = jj
98 | break
99 |
100 | return not_touching_windows
101 |
102 | #
103 | # Returns a list of windows with touching samples in the form [start, stop)
104 | # centered on the start of the touch where start and stop are indicies in the
105 | # global data array. If with_labels is true, then this returns a tuple with the
106 | # labels.
107 | #
108 |
109 | def get_touching_windows(data, with_labels=False):
110 | g_time = [datum['time'] for datum in data]
111 | g_touch_x = [datum['touch_x'] for datum in data]
112 | g_touch_y = [datum['touch_y'] for datum in data]
113 |
114 | # find windows where touching
115 | touching_points = []
116 | touching_labels = []
117 | is_touching = False
118 | old_touch_x = None
119 | old_touch_y = None
120 | for curr_x, curr_y, curr_time in zip(g_touch_x, g_touch_y, g_time):
121 | if curr_x != -2.0:
122 | if not is_touching:
123 | touching_points.append(curr_time)
124 | touching_labels.append([curr_x, curr_y])
125 | old_touch_x = curr_x
126 | old_touch_y = curr_y
127 | is_touching = True
128 | else:
129 | if old_touch_x != curr_x or old_touch_y != curr_y:
130 | # raise ConsecutiveTouchError()
131 | print "WARNING: Two consecutive touches in dataset (you may get odd results)"
132 | touching_points.append(curr_time)
133 | touching_labels.append([curr_x, curr_y])
134 | old_touch_x = curr_x
135 | old_touch_y = curr_y
136 | is_touching = True
137 | else:
138 | is_touching = False
139 |
140 | # expand touching windows
141 | touching_window_times = [(tp - (window_len / 2), tp + (window_len / 2)) for tp in touching_points]
142 | touching_windows = []
143 | touching_labels_final = []
144 | for (touching_window_min, touching_window_max), touching_label in zip(touching_window_times, touching_labels):
145 | min_index = None
146 | max_index = None
147 |
148 | for ii in xrange(len(g_time)):
149 | if min_index is None:
150 | if g_time[ii] >= touching_window_min:
151 | min_index = ii
152 | else:
153 | if g_time[ii] >= touching_window_max:
154 | max_index = ii
155 | break
156 |
157 | if min_index is not None and max_index is not None:
158 | touching_windows.append((min_index, max_index))
159 | touching_labels_final.append(touching_label)
160 |
161 | if with_labels:
162 | return touching_windows, touching_labels_final
163 | else:
164 | return touching_windows
165 |
166 | #
167 | # Takes in an array of windows and returns all the points in the window
168 | #
169 |
170 | def expand_windows(data, windows, interpolated=False):
171 | def data_for(accel_or_gyro, start, stop):
172 | d = data[start:stop]
173 | d_for = filter(lambda x: x["type"] == accel_or_gyro, d)
174 | time = [datum["time"] for datum in d_for]
175 | x = [datum["x"] for datum in d_for]
176 | y = [datum["y"] for datum in d_for]
177 | z = [datum["z"] for datum in d_for]
178 | return time, x, y, z
179 |
180 | to_return = []
181 |
182 | for start, stop in windows:
183 | at, ax, ay, az = data_for(ACCEL_TYPE, start, stop)
184 | gt, gx, gy, gz = data_for(GYRO_TYPE, start, stop)
185 | to_return.append(
186 | (at, ax, ay, az, gt, gx, gy, gz)
187 | )
188 |
189 | return to_return
190 |
191 | #
192 | # Takes in an array of windows and returns all the points in the window,
193 | # interpolating window samples within that
194 | #
195 |
196 | def expand_windows_interpolated(data, windows):
197 | g_time = [datum['time'] for datum in data]
198 | g_touch_x = [datum['touch_x'] for datum in data]
199 | g_touch_y = [datum['touch_y'] for datum in data]
200 |
201 | accel_time = [datum['time'] for datum in data if datum['type'] == ACCEL_TYPE]
202 | accel_x = [datum['x'] for datum in data if datum['type'] == ACCEL_TYPE]
203 | accel_y = [datum['y'] for datum in data if datum['type'] == ACCEL_TYPE]
204 | accel_z= [datum['z'] for datum in data if datum['type'] == ACCEL_TYPE]
205 |
206 | gyro_time = [datum['time'] for datum in data if datum['type'] == GYRO_TYPE]
207 | gyro_x = [datum['x'] for datum in data if datum['type'] == GYRO_TYPE]
208 | gyro_y = [datum['y'] for datum in data if datum['type'] == GYRO_TYPE]
209 | gyro_z= [datum['z'] for datum in data if datum['type'] == GYRO_TYPE]
210 |
211 | to_return = []
212 |
213 | for start, stop in windows:
214 | time_interp = np.linspace(g_time[start], g_time[stop - 1], window_samples)
215 |
216 | to_return.append(
217 | (
218 | time_interp,
219 | np.interp(time_interp, accel_time, accel_x),
220 | np.interp(time_interp, accel_time, accel_y),
221 | np.interp(time_interp, accel_time, accel_z),
222 | time_interp,
223 | np.interp(time_interp, gyro_time, gyro_x),
224 | np.interp(time_interp, gyro_time, gyro_y),
225 | np.interp(time_interp, gyro_time, gyro_z)
226 | )
227 | )
228 |
229 | return to_return
230 |
231 | #
232 | # contructs feature vectors from expanded windows
233 | #
234 |
235 | def feature_vectors_from_windows(windows):
236 | to_return = []
237 |
238 | for at, ax, ay, az, gt, gx, gy, gz in windows:
239 | to_return.append(
240 | np.concatenate((
241 | ax,
242 | ay,
243 | az,
244 | gx,
245 | gy,
246 | gz
247 | ))
248 | )
249 |
250 | return to_return
251 |
--------------------------------------------------------------------------------
/lib/learn_location.py:
--------------------------------------------------------------------------------
1 | from axolotl import *
2 | import numpy as np
3 | import matplotlib.pyplot as plt
4 | from keras.models import Sequential
5 | from keras.layers import Dense
6 | from sklearn.model_selection import train_test_split
7 | from keras import backend as K
8 | import numpy as np
9 |
10 | # config
11 | print_predictions = True
12 | graph_predictions = True
13 | graph_error_dist = True
14 |
15 | IPHONE_HEIGHT = 1920. / 401 # 1920px at 401ppi per https://www.apple.com/iphone-7/specs/
16 | IPHONE_WIDTH = 1080. / 401 # 1080px at 401ppi
17 |
18 | def in_distance(y_true, y_pred):
19 | y_error = y_true - y_pred
20 | y_error_normalized = (y_error) / 2 # the width is currently 2 (as the coordinates are [-1, 1])
21 | y_scaled_error = K.dot(y_error_normalized, K.constant(np.array([[IPHONE_WIDTH, 0], [0, IPHONE_HEIGHT]])))
22 | y_distance_sq = K.sum(K.square(y_scaled_error), axis=-1)
23 | y_distance = K.sqrt(y_distance_sq)
24 | return y_distance
25 |
26 | def in_dist_mean(*args, **kwargs):
27 | return K.mean(in_distance(*args, **kwargs))
28 |
29 | def train_location_model(data):
30 | # find windows where touching
31 | touching_windows, touching_labels = get_touching_windows(data, with_labels=True)
32 | expanded_touching_windows = expand_windows_interpolated(data, touching_windows)
33 | # convert to feature vectors
34 | positive_feature_vectors = feature_vectors_from_windows(expanded_touching_windows)
35 | # split into input (X) and output (Y) variables
36 | X = np.array(map(np.array, positive_feature_vectors))
37 | Y = np.array(map(np.array, touching_labels))
38 | # create model
39 | model = Sequential()
40 | model.add(Dense(window_samples * 4, input_dim=window_samples * 6, activation='linear'))
41 | model.add(Dense(window_samples * 2, activation='linear'))
42 | model.add(Dense(window_samples, activation='linear'))
43 | model.add(Dense(2, activation='linear'))
44 | # Compile model
45 | model.compile(loss='mse', optimizer='adam', metrics=['mse', in_dist_mean])
46 | # Fit the model
47 | model.fit(X, Y, nb_epoch=40, batch_size=20, verbose=0)
48 | return model
49 |
50 | def learn_location(accel_file, gyro_file, verbose=True):
51 | # read the data in
52 | data = read_data(accel_file, gyro_file)
53 |
54 | # find windows where touching
55 | touching_windows, touching_labels = get_touching_windows(data, with_labels=True)
56 | expanded_touching_windows = expand_windows_interpolated(data, touching_windows)
57 |
58 | # convert to feature vectors
59 | positive_feature_vectors = feature_vectors_from_windows(expanded_touching_windows)
60 |
61 | # learn
62 |
63 | # fix random seed for reproducibility
64 | # seed = 12
65 | # np.random.seed(seed)
66 |
67 | # split into input (X) and output (Y) variables
68 | X = np.array(map(np.array, positive_feature_vectors))
69 | Y = np.array(map(np.array, touching_labels))
70 |
71 | X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.33)
72 |
73 | # create model
74 | model = Sequential()
75 | model.add(Dense(window_samples * 4, input_dim=window_samples * 6, activation='linear'))
76 | model.add(Dense(window_samples * 2, activation='linear'))
77 | model.add(Dense(window_samples, activation='linear'))
78 | model.add(Dense(2, activation='linear'))
79 |
80 | # Compile model
81 | model.compile(loss='mse', optimizer='adam', metrics=['mse', in_dist_mean])
82 |
83 | # Fit the model
84 | verbosity = 0
85 | if verbose:
86 | verbosity = 1
87 | model.fit(X_train, Y_train, validation_data=(X_test, Y_test), nb_epoch=40, batch_size=20, verbose=verbosity)
88 |
89 | # print predictions
90 | if print_predictions and verbose:
91 | for x_val, y_val in zip(X_test, Y_test):
92 | print y_val, ":", model.predict(np.array([x_val]), verbose=0)
93 |
94 | # Show histogram of data
95 | if graph_error_dist:
96 | pred = model.predict(X_test)
97 | plt.hist(K.eval(in_distance(K.constant(Y_test), K.constant(pred))), bins=20, normed=True)
98 | plt.show()
99 |
100 | # graph predictions
101 | if graph_predictions and verbose:
102 | m = 10
103 | n = 10
104 |
105 | pred_data = zip(X_test, Y_test)
106 |
107 | for ii in xrange(min(m * n, len(X))):
108 | x_val, y_val = pred_data[ii]
109 |
110 | curr_plot = plt.subplot(m, n, ii + 1) # the position parameter is 1-indexed
111 |
112 | plt.plot(y_val[0], y_val[1], 'go')
113 | pred = model.predict(np.array([x_val]), verbose=0).flatten()
114 | plt.plot(pred[0], pred[1], 'ro')
115 |
116 | curr_plot.xaxis.set_visible(False)
117 | curr_plot.yaxis.set_visible(False)
118 |
119 | plt.ylim(-1, 1)
120 | plt.xlim(-1, 1)
121 |
122 | plt.show()
123 |
124 | return dict(zip(model.metrics_names, model.evaluate(X_test, Y_test, verbose=verbosity)))
125 |
126 | if __name__ == "__main__":
127 | learn_location("data/sample_0/accel.txt", "data/sample_0/gyro.txt")
128 | print ""
129 |
--------------------------------------------------------------------------------
/lib/learn_touches.py:
--------------------------------------------------------------------------------
1 | from lib.axolotl import *
2 | import numpy as np
3 | from keras.models import Sequential
4 | from keras.layers import Dense
5 | from sklearn.model_selection import train_test_split
6 |
7 | # config
8 | print_predictions = False
9 |
10 | def train_touch_model(data):
11 | # find windows where not touching
12 | not_touching_windows = get_not_touching_windows(data)
13 | expanded_not_touching_windows = expand_windows_interpolated(data, not_touching_windows)
14 |
15 | # find windows where touching
16 | touching_windows = get_touching_windows(data)
17 | expanded_touching_windows = expand_windows_interpolated(data, touching_windows)
18 |
19 | # convert to feature vectors
20 | positive_feature_vectors = feature_vectors_from_windows(expanded_touching_windows)
21 | negative_feature_vectors = feature_vectors_from_windows(expanded_not_touching_windows)
22 |
23 | # split into input (X) and output (Y) variables
24 | X = np.array(map(np.array, positive_feature_vectors) + map(np.array, negative_feature_vectors))
25 | Y = np.array([1] * len(positive_feature_vectors) + [0] * len(negative_feature_vectors))
26 |
27 | # create model
28 | model = Sequential()
29 | model.add(Dense(window_samples * 4, input_dim=window_samples * 6, activation='relu'))
30 | model.add(Dense(window_samples * 2, activation='relu'))
31 | model.add(Dense(window_samples, activation='relu'))
32 | model.add(Dense(1, activation='sigmoid'))
33 |
34 | # Compile model
35 | model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
36 |
37 | model.fit(X, Y, nb_epoch=40, batch_size=20)
38 | return model
39 |
40 | def learn_touches(accel_file, gyro_file, verbose=True):
41 | # read the data in
42 | data = read_data(accel_file, gyro_file)
43 |
44 | # find windows where not touching
45 | not_touching_windows = get_not_touching_windows(data)
46 | expanded_not_touching_windows = expand_windows_interpolated(data, not_touching_windows)
47 |
48 | # find windows where touching
49 | touching_windows = get_touching_windows(data)
50 | expanded_touching_windows = expand_windows_interpolated(data, touching_windows)
51 |
52 | # convert to feature vectors
53 | positive_feature_vectors = feature_vectors_from_windows(expanded_touching_windows)
54 | negative_feature_vectors = feature_vectors_from_windows(expanded_not_touching_windows)
55 |
56 | # learn
57 | if verbose:
58 | print "Learning..."
59 |
60 | # fix random seed for reproducibility
61 | # seed = 12
62 | # np.random.seed(seed)
63 |
64 | # split into input (X) and output (Y) variables
65 | X = np.array(map(np.array, positive_feature_vectors) + map(np.array, negative_feature_vectors))
66 | Y = np.array([1] * len(positive_feature_vectors) + [0] * len(negative_feature_vectors))
67 |
68 | X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.33)
69 |
70 | # create model
71 | model = Sequential()
72 | model.add(Dense(window_samples * 4, input_dim=window_samples * 6, activation='relu'))
73 | model.add(Dense(window_samples * 2, activation='relu'))
74 | model.add(Dense(window_samples, activation='relu'))
75 | model.add(Dense(1, activation='sigmoid'))
76 |
77 | # Compile model
78 | model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
79 |
80 | # Fit the model
81 | verbosity = 0
82 | if verbose:
83 | verbosity = 1
84 | model.fit(X_train, Y_train, validation_data=(X_test, Y_test), nb_epoch=40, batch_size=20, verbose=verbosity)
85 |
86 | # print predictions
87 | if print_predictions and verbose:
88 | for x_val, y_val in zip(X_test, Y_test):
89 | print y_val, ":", model.predict(np.array([x_val]), verbose=0)
90 |
91 | return dict(zip(model.metrics_names, model.evaluate(X_test, Y_test, verbose=verbosity)))
92 |
93 | if __name__ == "__main__":
94 | learn_touches("data/sample_0/accel.txt", "data/sample_0/gyro.txt")
95 | print ""
96 |
--------------------------------------------------------------------------------
/location_model.mlmodel:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomasreimers/axolotl/c43d0a60fee659cdd075f7330a010fa6030bb6c2/location_model.mlmodel
--------------------------------------------------------------------------------
/predict_touches_sequence.py:
--------------------------------------------------------------------------------
1 | import sys
2 | from lib.axolotl import *
3 | import numpy as np
4 | import matplotlib.pyplot as plt
5 | from keras.models import Sequential
6 | from keras.layers import Dense
7 | from sklearn.model_selection import train_test_split
8 | import coremltools
9 | from lib.learn_location import *
10 | from lib.learn_touches import *
11 |
12 | def fetch_data():
13 | # read the data in
14 | data = read_data("data/sample_0/accel.txt", "data/sample_0/gyro.txt")
15 |
16 | # split off the first part of data as training (the latter half will be testing)
17 | TRAINING_SIZE = 0.7
18 | slice_at = int(TRAINING_SIZE * len(data))
19 | train_data = data[:slice_at]
20 | test_data = data[slice_at:]
21 | return train_data, test_data
22 |
23 | def graph_predictions(model, test_data):
24 | # generate windows every 10ms for time in prediction
25 | windows = get_all_windows(test_data, min_start_distance=0.01)
26 | expanded_windows = expand_windows_interpolated(test_data, windows)
27 | feature_vectors = feature_vectors_from_windows(expanded_windows)
28 |
29 | # predict the touches
30 | pred = model.predict(np.array(feature_vectors))
31 |
32 | # graph the raw data
33 | g_time = [datum['time'] for datum in test_data]
34 | g_touch_x = [datum['touch_x'] for datum in test_data]
35 | g_touch_y = [datum['touch_y'] for datum in test_data]
36 |
37 | accel_time = [datum['time'] for datum in test_data if datum['type'] == ACCEL_TYPE]
38 | accel_x = [datum['x'] for datum in test_data if datum['type'] == ACCEL_TYPE]
39 | accel_y = [datum['y'] for datum in test_data if datum['type'] == ACCEL_TYPE]
40 | accel_z= [datum['z'] for datum in test_data if datum['type'] == ACCEL_TYPE]
41 |
42 | gyro_time = [datum['time'] for datum in test_data if datum['type'] == GYRO_TYPE]
43 | gyro_x = [datum['x'] for datum in test_data if datum['type'] == GYRO_TYPE]
44 | gyro_y = [datum['y'] for datum in test_data if datum['type'] == GYRO_TYPE]
45 | gyro_z= [datum['z'] for datum in test_data if datum['type'] == GYRO_TYPE]
46 |
47 | plt.subplot(2, 1, 1)
48 |
49 | ax_h, = plt.plot(accel_time, accel_x, label="Accel X")
50 | ay_h, = plt.plot(accel_time, accel_y, label="Accel Y")
51 | az_h, = plt.plot(accel_time, accel_z, label="Accel Z")
52 |
53 | gx_h, = plt.plot(gyro_time, gyro_x, label="Gyro X")
54 | gy_h, = plt.plot(gyro_time, gyro_y, label="Gyro Y")
55 | gz_h, = plt.plot(gyro_time, gyro_z, label="Gyro Z")
56 |
57 | plt.legend(handles=[ax_h, ay_h, az_h, gx_h, gy_h, gz_h])
58 |
59 | first_touch = None
60 | last_touch = None
61 | for curr_x, curr_time in zip(g_touch_x, g_time):
62 | if curr_x != -2.0:
63 | if first_touch is None:
64 | first_touch = curr_time
65 | last_touch = curr_time
66 | else:
67 | if first_touch is not None:
68 | plt.axvspan(first_touch, last_touch, color='red', alpha=0.25)
69 | first_touch = None
70 | last_touch = None
71 |
72 | plt.subplot(2, 1, 2)
73 |
74 | plt.plot([(g_time[window[0]] + g_time[window[1] - 1]) / 2 for window in windows], pred)
75 |
76 | first_touch = None
77 | last_touch = None
78 | for curr_x, curr_time in zip(g_touch_x, g_time):
79 | if curr_x != -2.0:
80 | if first_touch is None:
81 | first_touch = curr_time
82 | last_touch = curr_time
83 | else:
84 | if first_touch is not None:
85 | plt.axvspan(first_touch, last_touch, color='red', alpha=0.25)
86 | first_touch = None
87 | last_touch = None
88 |
89 | plt.show()
90 |
91 | def export_coreml_location_model(model):
92 | cm = coremltools.converters.keras.convert(
93 | model, input_names=['accel_gyro_stream'], output_names=['touch_predictions'])
94 | cm.author = 'Tomas Reimers & Greg Foster'
95 | cm.license = 'MIT'
96 | cm.short_description = ''
97 | cm.input_description['accel_gyro_stream'] = 'An array of time indexed sensor data'
98 | cm.output_description['touch_predictions'] = 'Was the screen touched or not?'
99 | cm.save('location_model.mlmodel')
100 |
101 | def export_coreml_touch_model(model):
102 | cm = coremltools.converters.keras.convert(
103 | model, input_names=['touch_windows'], output_names=['touch_predictions'])
104 | cm.author = 'Tomas Reimers & Greg Foster'
105 | cm.license = 'MIT'
106 | cm.short_description = ''
107 | cm.input_description['touch_windows'] = 'An array of arrays of time indexed sensor data'
108 | cm.output_description['touch_predictions'] = 'Where was the screen touched?'
109 | cm.save('touch_model.mlmodel')
110 |
111 | if __name__ == "__main__":
112 | train_data, test_data = fetch_data()
113 | argc = len(sys.argv)
114 | if argc == 2 and sys.argv[1] == 'plot':
115 | model = train_touch_model(train_data)
116 | graph_predictions(model, test_data)
117 | elif argc == 2 and sys.argv[1] == 'coreml':
118 | # Use all data, no point in eval when training for export.
119 | print('training touch model')
120 | model = train_touch_model(train_data + test_data)
121 | export_coreml_touch_model(model)
122 | print('saved touch model')
123 | print('training location model')
124 | model = train_location_model(train_data + test_data)
125 | export_coreml_location_model(model)
126 | print('saved location model')
127 |
--------------------------------------------------------------------------------
/touch_model.mlmodel:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomasreimers/axolotl/c43d0a60fee659cdd075f7330a010fa6030bb6c2/touch_model.mlmodel
--------------------------------------------------------------------------------
/visualize.py:
--------------------------------------------------------------------------------
1 | import matplotlib.pyplot as plt
2 | from lib.axolotl import *
3 |
4 | PHASE_0_RAW_DATA = 0
5 | PHASE_1_RAW_DATA = 1
6 | PHASE_2_WINDOWS = 2
7 | PHASE_3_SAMPLES = 3
8 | PHASE_4_INTERP_10_SAMPLES = 4
9 | PHASE_5_INTERP_20_SAMPLES = 5
10 | PHASE_6_INTERP_30_SAMPLES = 6
11 |
12 | # read the data in
13 | data = read_data("data/sample_0/accel.txt", "data/sample_0/gyro.txt")
14 |
15 | # find windows where not touching
16 | not_touching_windows = get_not_touching_windows(data)
17 |
18 | # find windows where touching
19 | touching_windows = get_touching_windows(data)
20 |
21 | # graph the windows
22 | phase = None
23 | options = {
24 | "Raw Data": PHASE_0_RAW_DATA,
25 | "Raw Data with Touches": PHASE_1_RAW_DATA,
26 | "Windows": PHASE_2_WINDOWS,
27 | "Samples": PHASE_3_SAMPLES,
28 | "Samples (interpolated, 10 points)": PHASE_4_INTERP_10_SAMPLES,
29 | "Samples (interpolated, 20 points)": PHASE_5_INTERP_20_SAMPLES,
30 | "Samples (interpolated, 30 points)": PHASE_6_INTERP_30_SAMPLES,
31 | }
32 | while phase not in options.values():
33 | for k, v in sorted(options.iteritems(), key=lambda x: x[1]):
34 | print "Option " + str(v) + ": " + k
35 | phase = int(raw_input("Which option would you like to visualize (number only): "))
36 |
37 | if PHASE_4_INTERP_10_SAMPLES == phase:
38 | set_window_samples(10)
39 | if PHASE_5_INTERP_20_SAMPLES == phase:
40 | set_window_samples(20)
41 | if PHASE_6_INTERP_30_SAMPLES == phase:
42 | set_window_samples(30)
43 |
44 | if phase in [PHASE_0_RAW_DATA, PHASE_1_RAW_DATA, PHASE_2_WINDOWS]:
45 | g_time = [datum['time'] for datum in data]
46 | g_touch_x = [datum['touch_x'] for datum in data]
47 | g_touch_y = [datum['touch_y'] for datum in data]
48 |
49 | accel_time = [datum['time'] for datum in data if datum['type'] == ACCEL_TYPE]
50 | accel_x = [datum['x'] for datum in data if datum['type'] == ACCEL_TYPE]
51 | accel_y = [datum['y'] for datum in data if datum['type'] == ACCEL_TYPE]
52 | accel_z= [datum['z'] for datum in data if datum['type'] == ACCEL_TYPE]
53 |
54 | gyro_time = [datum['time'] for datum in data if datum['type'] == GYRO_TYPE]
55 | gyro_x = [datum['x'] for datum in data if datum['type'] == GYRO_TYPE]
56 | gyro_y = [datum['y'] for datum in data if datum['type'] == GYRO_TYPE]
57 | gyro_z= [datum['z'] for datum in data if datum['type'] == GYRO_TYPE]
58 |
59 | ax_h, = plt.plot(accel_time, accel_x, label="Accel X")
60 | ay_h, = plt.plot(accel_time, accel_y, label="Accel Y")
61 | az_h, = plt.plot(accel_time, accel_z, label="Accel Z")
62 |
63 | gx_h, = plt.plot(gyro_time, gyro_x, label="Gyro X")
64 | gy_h, = plt.plot(gyro_time, gyro_y, label="Gyro Y")
65 | gz_h, = plt.plot(gyro_time, gyro_z, label="Gyro Z")
66 |
67 | plt.legend(handles=[ax_h, ay_h, az_h, gx_h, gy_h, gz_h])
68 |
69 | # graph times when touching
70 | first_touch = None
71 | last_touch = None
72 |
73 | if phase != PHASE_0_RAW_DATA:
74 | for curr_x, curr_time in zip(g_touch_x, g_time):
75 | if curr_x != -2.0:
76 | if first_touch is None:
77 | first_touch = curr_time
78 | last_touch = curr_time
79 | else:
80 | if first_touch is not None:
81 | plt.axvspan(first_touch, last_touch, color='red', alpha=0.25)
82 | first_touch = None
83 | last_touch = None
84 |
85 | if phase == PHASE_2_WINDOWS:
86 | # graph touching windows
87 | for touch_start, touch_end in touching_windows:
88 | plt.axvspan(g_time[touch_start], g_time[touch_end], color='blue', alpha=0.25)
89 |
90 | # graph not touching windows
91 | for touch_start, touch_end in not_touching_windows:
92 | plt.axvspan(g_time[touch_start], g_time[touch_end], color='green', alpha=0.25)
93 |
94 | # show the plot
95 | plt.show()
96 |
97 | if phase in [PHASE_3_SAMPLES, PHASE_4_INTERP_10_SAMPLES, PHASE_5_INTERP_20_SAMPLES, PHASE_6_INTERP_30_SAMPLES]:
98 | # settings
99 | m = 10
100 | n = 10
101 | min_y = -1
102 | max_y = 1
103 |
104 | # graph
105 | for windows, title in [(touching_windows, "Touching Samples"), (not_touching_windows, "Resting Samples")]:
106 | print title
107 |
108 | if phase == PHASE_3_SAMPLES:
109 | expanded_windows = expand_windows(data, windows)
110 | else:
111 | expanded_windows = expand_windows_interpolated(data, windows)
112 |
113 | for ii in xrange(min(len(expanded_windows), m * n)):
114 | at, ax, ay, az, gt, gx, gy, gz = expanded_windows[ii]
115 |
116 | curr_plot = plt.subplot(m, n, ii + 1) # the position parameter is 1-indexed
117 |
118 | plt.plot(at, ax)
119 | plt.plot(at, ay)
120 | plt.plot(at, az)
121 |
122 | plt.plot(gt, gx)
123 | plt.plot(gt, gy)
124 | plt.plot(gt, gz)
125 |
126 | curr_plot.xaxis.set_visible(False)
127 | curr_plot.yaxis.set_visible(False)
128 |
129 | plt.ylim(min_y, max_y)
130 |
131 | plt.show()
132 |
--------------------------------------------------------------------------------