├── .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 | --------------------------------------------------------------------------------