iCuke 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. data/.gitignore +13 -0
  2. data/LICENSE +20 -0
  3. data/README.rdoc +69 -0
  4. data/Rakefile +80 -0
  5. data/VERSION +1 -0
  6. data/app/iCuke/.gitignore +1 -0
  7. data/app/iCuke/Classes/FlipsideView.h +13 -0
  8. data/app/iCuke/Classes/FlipsideView.m +32 -0
  9. data/app/iCuke/Classes/FlipsideViewController.h +25 -0
  10. data/app/iCuke/Classes/FlipsideViewController.m +54 -0
  11. data/app/iCuke/Classes/MainView.h +15 -0
  12. data/app/iCuke/Classes/MainView.m +32 -0
  13. data/app/iCuke/Classes/MainViewController.h +16 -0
  14. data/app/iCuke/Classes/MainViewController.m +86 -0
  15. data/app/iCuke/Classes/iCukeAppDelegate.h +20 -0
  16. data/app/iCuke/Classes/iCukeAppDelegate.m +33 -0
  17. data/app/iCuke/FlipsideView.xib +444 -0
  18. data/app/iCuke/MainView.xib +520 -0
  19. data/app/iCuke/MainWindow.xib +355 -0
  20. data/app/iCuke/SniffingView.h +20 -0
  21. data/app/iCuke/SniffingView.m +191 -0
  22. data/app/iCuke/iCuke-Info.plist +30 -0
  23. data/app/iCuke/iCuke.xcodeproj/project.pbxproj +313 -0
  24. data/app/iCuke/iCuke_Prefix.pch +14 -0
  25. data/app/iCuke/main.m +16 -0
  26. data/ext/iCuke/.gitignore +2 -0
  27. data/ext/iCuke/DefaultsResponse.h +5 -0
  28. data/ext/iCuke/DefaultsResponse.m +67 -0
  29. data/ext/iCuke/EventResponse.h +5 -0
  30. data/ext/iCuke/EventResponse.m +122 -0
  31. data/ext/iCuke/Rakefile +22 -0
  32. data/ext/iCuke/Recorder.h +15 -0
  33. data/ext/iCuke/Recorder.m +85 -0
  34. data/ext/iCuke/RecorderResponse.h +5 -0
  35. data/ext/iCuke/RecorderResponse.m +59 -0
  36. data/ext/iCuke/SynthesizeSingleton.h +68 -0
  37. data/ext/iCuke/ViewResponse.h +5 -0
  38. data/ext/iCuke/ViewResponse.m +84 -0
  39. data/ext/iCuke/Viewer.h +8 -0
  40. data/ext/iCuke/Viewer.m +153 -0
  41. data/ext/iCuke/iCukeHTTPResponseHandler.h +50 -0
  42. data/ext/iCuke/iCukeHTTPResponseHandler.m +381 -0
  43. data/ext/iCuke/iCukeHTTPServer.h +53 -0
  44. data/ext/iCuke/iCukeHTTPServer.m +365 -0
  45. data/ext/iCuke/iCukeServer.h +16 -0
  46. data/ext/iCuke/iCukeServer.m +46 -0
  47. data/ext/iCuke/json/JSON.h +50 -0
  48. data/ext/iCuke/json/NSObject+SBJSON.h +68 -0
  49. data/ext/iCuke/json/NSObject+SBJSON.m +53 -0
  50. data/ext/iCuke/json/NSString+SBJSON.h +58 -0
  51. data/ext/iCuke/json/NSString+SBJSON.m +55 -0
  52. data/ext/iCuke/json/SBJSON.h +75 -0
  53. data/ext/iCuke/json/SBJSON.m +212 -0
  54. data/ext/iCuke/json/SBJsonBase.h +86 -0
  55. data/ext/iCuke/json/SBJsonBase.m +78 -0
  56. data/ext/iCuke/json/SBJsonParser.h +87 -0
  57. data/ext/iCuke/json/SBJsonParser.m +475 -0
  58. data/ext/iCuke/json/SBJsonWriter.h +129 -0
  59. data/ext/iCuke/json/SBJsonWriter.m +228 -0
  60. data/features/icuke.feature +17 -0
  61. data/features/support/env.rb +3 -0
  62. data/iCuke.gemspec +113 -0
  63. data/lib/icuke/cucumber.rb +211 -0
  64. data/lib/icuke/simulate.rb +132 -0
  65. data/lib/icuke/simulator.rb +107 -0
  66. data/lib/icuke.rb +1 -0
  67. metadata +163 -0
@@ -0,0 +1,355 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
3
+ <data>
4
+ <int key="IBDocument.SystemTarget">784</int>
5
+ <string key="IBDocument.SystemVersion">10C540</string>
6
+ <string key="IBDocument.InterfaceBuilderVersion">740</string>
7
+ <string key="IBDocument.AppKitVersion">1038.25</string>
8
+ <string key="IBDocument.HIToolboxVersion">458.00</string>
9
+ <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
10
+ <string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
11
+ <string key="NS.object.0">62</string>
12
+ </object>
13
+ <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
14
+ <bool key="EncodedWithXMLCoder">YES</bool>
15
+ <integer value="2"/>
16
+ </object>
17
+ <object class="NSArray" key="IBDocument.PluginDependencies">
18
+ <bool key="EncodedWithXMLCoder">YES</bool>
19
+ <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
20
+ </object>
21
+ <object class="NSMutableDictionary" key="IBDocument.Metadata">
22
+ <bool key="EncodedWithXMLCoder">YES</bool>
23
+ <object class="NSArray" key="dict.sortedKeys" id="0">
24
+ <bool key="EncodedWithXMLCoder">YES</bool>
25
+ </object>
26
+ <object class="NSMutableArray" key="dict.values">
27
+ <bool key="EncodedWithXMLCoder">YES</bool>
28
+ </object>
29
+ </object>
30
+ <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
31
+ <bool key="EncodedWithXMLCoder">YES</bool>
32
+ <object class="IBProxyObject" id="841351856">
33
+ <string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
34
+ </object>
35
+ <object class="IBProxyObject" id="71653367">
36
+ <string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
37
+ </object>
38
+ <object class="IBUICustomObject" id="664661524"/>
39
+ <object class="IBUIWindow" id="380026005">
40
+ <reference key="NSNextResponder"/>
41
+ <int key="NSvFlags">1316</int>
42
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
43
+ <string key="NSFrameSize">{320, 480}</string>
44
+ <reference key="NSSuperview"/>
45
+ <object class="NSColor" key="IBUIBackgroundColor">
46
+ <int key="NSColorSpace">1</int>
47
+ <bytes key="NSRGB">MCAwIDAAA</bytes>
48
+ </object>
49
+ <bool key="IBUIClearsContextBeforeDrawing">NO</bool>
50
+ <bool key="IBUIMultipleTouchEnabled">YES</bool>
51
+ <object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
52
+ </object>
53
+ </object>
54
+ <object class="IBObjectContainer" key="IBDocument.Objects">
55
+ <object class="NSMutableArray" key="connectionRecords">
56
+ <bool key="EncodedWithXMLCoder">YES</bool>
57
+ <object class="IBConnectionRecord">
58
+ <object class="IBCocoaTouchOutletConnection" key="connection">
59
+ <string key="label">delegate</string>
60
+ <reference key="source" ref="841351856"/>
61
+ <reference key="destination" ref="664661524"/>
62
+ </object>
63
+ <int key="connectionID">4</int>
64
+ </object>
65
+ <object class="IBConnectionRecord">
66
+ <object class="IBCocoaTouchOutletConnection" key="connection">
67
+ <string key="label">window</string>
68
+ <reference key="source" ref="664661524"/>
69
+ <reference key="destination" ref="380026005"/>
70
+ </object>
71
+ <int key="connectionID">5</int>
72
+ </object>
73
+ </object>
74
+ <object class="IBMutableOrderedSet" key="objectRecords">
75
+ <object class="NSArray" key="orderedObjects">
76
+ <bool key="EncodedWithXMLCoder">YES</bool>
77
+ <object class="IBObjectRecord">
78
+ <int key="objectID">0</int>
79
+ <reference key="object" ref="0"/>
80
+ <reference key="children" ref="1000"/>
81
+ <nil key="parent"/>
82
+ </object>
83
+ <object class="IBObjectRecord">
84
+ <int key="objectID">2</int>
85
+ <reference key="object" ref="380026005"/>
86
+ <object class="NSMutableArray" key="children">
87
+ <bool key="EncodedWithXMLCoder">YES</bool>
88
+ </object>
89
+ <reference key="parent" ref="0"/>
90
+ </object>
91
+ <object class="IBObjectRecord">
92
+ <int key="objectID">-1</int>
93
+ <reference key="object" ref="841351856"/>
94
+ <reference key="parent" ref="0"/>
95
+ <string key="objectName">File's Owner</string>
96
+ </object>
97
+ <object class="IBObjectRecord">
98
+ <int key="objectID">3</int>
99
+ <reference key="object" ref="664661524"/>
100
+ <reference key="parent" ref="0"/>
101
+ </object>
102
+ <object class="IBObjectRecord">
103
+ <int key="objectID">-2</int>
104
+ <reference key="object" ref="71653367"/>
105
+ <reference key="parent" ref="0"/>
106
+ </object>
107
+ </object>
108
+ </object>
109
+ <object class="NSMutableDictionary" key="flattenedProperties">
110
+ <bool key="EncodedWithXMLCoder">YES</bool>
111
+ <object class="NSArray" key="dict.sortedKeys">
112
+ <bool key="EncodedWithXMLCoder">YES</bool>
113
+ <string>-1.CustomClassName</string>
114
+ <string>-2.CustomClassName</string>
115
+ <string>2.IBAttributePlaceholdersKey</string>
116
+ <string>2.IBEditorWindowLastContentRect</string>
117
+ <string>2.IBPluginDependency</string>
118
+ <string>3.CustomClassName</string>
119
+ <string>3.IBPluginDependency</string>
120
+ </object>
121
+ <object class="NSMutableArray" key="dict.values">
122
+ <bool key="EncodedWithXMLCoder">YES</bool>
123
+ <string>UIApplication</string>
124
+ <string>UIResponder</string>
125
+ <object class="NSMutableDictionary">
126
+ <bool key="EncodedWithXMLCoder">YES</bool>
127
+ <reference key="dict.sortedKeys" ref="0"/>
128
+ <object class="NSMutableArray" key="dict.values">
129
+ <bool key="EncodedWithXMLCoder">YES</bool>
130
+ </object>
131
+ </object>
132
+ <string>{{629, 276}, {320, 480}}</string>
133
+ <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
134
+ <string>iCukeAppDelegate</string>
135
+ <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
136
+ </object>
137
+ </object>
138
+ <object class="NSMutableDictionary" key="unlocalizedProperties">
139
+ <bool key="EncodedWithXMLCoder">YES</bool>
140
+ <reference key="dict.sortedKeys" ref="0"/>
141
+ <object class="NSMutableArray" key="dict.values">
142
+ <bool key="EncodedWithXMLCoder">YES</bool>
143
+ </object>
144
+ </object>
145
+ <nil key="activeLocalization"/>
146
+ <object class="NSMutableDictionary" key="localizations">
147
+ <bool key="EncodedWithXMLCoder">YES</bool>
148
+ <reference key="dict.sortedKeys" ref="0"/>
149
+ <object class="NSMutableArray" key="dict.values">
150
+ <bool key="EncodedWithXMLCoder">YES</bool>
151
+ </object>
152
+ </object>
153
+ <nil key="sourceID"/>
154
+ <int key="maxID">21</int>
155
+ </object>
156
+ <object class="IBClassDescriber" key="IBDocument.Classes">
157
+ <object class="NSMutableArray" key="referencedPartialClassDescriptions">
158
+ <bool key="EncodedWithXMLCoder">YES</bool>
159
+ <object class="IBPartialClassDescription">
160
+ <string key="className">NSObject</string>
161
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
162
+ <string key="majorKey">IBProjectSource</string>
163
+ <string key="minorKey">json/NSObject+SBJSON.h</string>
164
+ </object>
165
+ </object>
166
+ <object class="IBPartialClassDescription">
167
+ <string key="className">NSObject</string>
168
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
169
+ <string key="majorKey">IBProjectSource</string>
170
+ <string key="minorKey">json/SBJsonWriter.h</string>
171
+ </object>
172
+ </object>
173
+ <object class="IBPartialClassDescription">
174
+ <string key="className">iCukeAppDelegate</string>
175
+ <string key="superclassName">NSObject</string>
176
+ <object class="NSMutableDictionary" key="outlets">
177
+ <string key="NS.key.0">window</string>
178
+ <string key="NS.object.0">UIWindow</string>
179
+ </object>
180
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
181
+ <string key="majorKey">IBProjectSource</string>
182
+ <string key="minorKey">Classes/iCukeAppDelegate.h</string>
183
+ </object>
184
+ </object>
185
+ </object>
186
+ <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
187
+ <bool key="EncodedWithXMLCoder">YES</bool>
188
+ <object class="IBPartialClassDescription">
189
+ <string key="className">NSObject</string>
190
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
191
+ <string key="majorKey">IBFrameworkSource</string>
192
+ <string key="minorKey">Foundation.framework/Headers/NSError.h</string>
193
+ </object>
194
+ </object>
195
+ <object class="IBPartialClassDescription">
196
+ <string key="className">NSObject</string>
197
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
198
+ <string key="majorKey">IBFrameworkSource</string>
199
+ <string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
200
+ </object>
201
+ </object>
202
+ <object class="IBPartialClassDescription">
203
+ <string key="className">NSObject</string>
204
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
205
+ <string key="majorKey">IBFrameworkSource</string>
206
+ <string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
207
+ </object>
208
+ </object>
209
+ <object class="IBPartialClassDescription">
210
+ <string key="className">NSObject</string>
211
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
212
+ <string key="majorKey">IBFrameworkSource</string>
213
+ <string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
214
+ </object>
215
+ </object>
216
+ <object class="IBPartialClassDescription">
217
+ <string key="className">NSObject</string>
218
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
219
+ <string key="majorKey">IBFrameworkSource</string>
220
+ <string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
221
+ </object>
222
+ </object>
223
+ <object class="IBPartialClassDescription">
224
+ <string key="className">NSObject</string>
225
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
226
+ <string key="majorKey">IBFrameworkSource</string>
227
+ <string key="minorKey">Foundation.framework/Headers/NSNetServices.h</string>
228
+ </object>
229
+ </object>
230
+ <object class="IBPartialClassDescription">
231
+ <string key="className">NSObject</string>
232
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
233
+ <string key="majorKey">IBFrameworkSource</string>
234
+ <string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
235
+ </object>
236
+ </object>
237
+ <object class="IBPartialClassDescription">
238
+ <string key="className">NSObject</string>
239
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
240
+ <string key="majorKey">IBFrameworkSource</string>
241
+ <string key="minorKey">Foundation.framework/Headers/NSPort.h</string>
242
+ </object>
243
+ </object>
244
+ <object class="IBPartialClassDescription">
245
+ <string key="className">NSObject</string>
246
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
247
+ <string key="majorKey">IBFrameworkSource</string>
248
+ <string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
249
+ </object>
250
+ </object>
251
+ <object class="IBPartialClassDescription">
252
+ <string key="className">NSObject</string>
253
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
254
+ <string key="majorKey">IBFrameworkSource</string>
255
+ <string key="minorKey">Foundation.framework/Headers/NSStream.h</string>
256
+ </object>
257
+ </object>
258
+ <object class="IBPartialClassDescription">
259
+ <string key="className">NSObject</string>
260
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
261
+ <string key="majorKey">IBFrameworkSource</string>
262
+ <string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
263
+ </object>
264
+ </object>
265
+ <object class="IBPartialClassDescription">
266
+ <string key="className">NSObject</string>
267
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
268
+ <string key="majorKey">IBFrameworkSource</string>
269
+ <string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
270
+ </object>
271
+ </object>
272
+ <object class="IBPartialClassDescription">
273
+ <string key="className">NSObject</string>
274
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
275
+ <string key="majorKey">IBFrameworkSource</string>
276
+ <string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
277
+ </object>
278
+ </object>
279
+ <object class="IBPartialClassDescription">
280
+ <string key="className">NSObject</string>
281
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
282
+ <string key="majorKey">IBFrameworkSource</string>
283
+ <string key="minorKey">Foundation.framework/Headers/NSXMLParser.h</string>
284
+ </object>
285
+ </object>
286
+ <object class="IBPartialClassDescription">
287
+ <string key="className">NSObject</string>
288
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
289
+ <string key="majorKey">IBFrameworkSource</string>
290
+ <string key="minorKey">UIKit.framework/Headers/UIAccessibility.h</string>
291
+ </object>
292
+ </object>
293
+ <object class="IBPartialClassDescription">
294
+ <string key="className">NSObject</string>
295
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
296
+ <string key="majorKey">IBFrameworkSource</string>
297
+ <string key="minorKey">UIKit.framework/Headers/UINibLoading.h</string>
298
+ </object>
299
+ </object>
300
+ <object class="IBPartialClassDescription">
301
+ <string key="className">NSObject</string>
302
+ <object class="IBClassDescriptionSource" key="sourceIdentifier" id="588827240">
303
+ <string key="majorKey">IBFrameworkSource</string>
304
+ <string key="minorKey">UIKit.framework/Headers/UIResponder.h</string>
305
+ </object>
306
+ </object>
307
+ <object class="IBPartialClassDescription">
308
+ <string key="className">UIApplication</string>
309
+ <string key="superclassName">UIResponder</string>
310
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
311
+ <string key="majorKey">IBFrameworkSource</string>
312
+ <string key="minorKey">UIKit.framework/Headers/UIApplication.h</string>
313
+ </object>
314
+ </object>
315
+ <object class="IBPartialClassDescription">
316
+ <string key="className">UIResponder</string>
317
+ <string key="superclassName">NSObject</string>
318
+ <reference key="sourceIdentifier" ref="588827240"/>
319
+ </object>
320
+ <object class="IBPartialClassDescription">
321
+ <string key="className">UIView</string>
322
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
323
+ <string key="majorKey">IBFrameworkSource</string>
324
+ <string key="minorKey">UIKit.framework/Headers/UITextField.h</string>
325
+ </object>
326
+ </object>
327
+ <object class="IBPartialClassDescription">
328
+ <string key="className">UIView</string>
329
+ <string key="superclassName">UIResponder</string>
330
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
331
+ <string key="majorKey">IBFrameworkSource</string>
332
+ <string key="minorKey">UIKit.framework/Headers/UIView.h</string>
333
+ </object>
334
+ </object>
335
+ <object class="IBPartialClassDescription">
336
+ <string key="className">UIWindow</string>
337
+ <string key="superclassName">UIView</string>
338
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
339
+ <string key="majorKey">IBFrameworkSource</string>
340
+ <string key="minorKey">UIKit.framework/Headers/UIWindow.h</string>
341
+ </object>
342
+ </object>
343
+ </object>
344
+ </object>
345
+ <int key="IBDocument.localizationMode">0</int>
346
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
347
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
348
+ <integer value="3100" key="NS.object.0"/>
349
+ </object>
350
+ <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
351
+ <string key="IBDocument.LastKnownRelativeProjectPath">iCuke.xcodeproj</string>
352
+ <int key="IBDocument.defaultPropertyAccessControl">3</int>
353
+ <string key="IBCocoaTouchPluginVersion">3.1</string>
354
+ </data>
355
+ </archive>
@@ -0,0 +1,20 @@
1
+ //
2
+ // SniffingView.h
3
+ // iCuke
4
+ //
5
+ // Created by Rob Holland on 08/03/2010.
6
+ // Copyright 2010 The IT Refinery. All rights reserved.
7
+ //
8
+
9
+ #import <Foundation/Foundation.h>
10
+
11
+
12
+ @interface SniffingView : UIView {
13
+
14
+ }
15
+
16
+ - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
17
+ - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
18
+ - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
19
+
20
+ @end
@@ -0,0 +1,191 @@
1
+ //
2
+ // SniffingView.m
3
+ // iCuke
4
+ //
5
+ // Created by Rob Holland on 08/03/2010.
6
+ // Copyright 2010 The IT Refinery. All rights reserved.
7
+ //
8
+
9
+ #import "SniffingView.h"
10
+
11
+ @interface UIEvent (Observing)
12
+ -(void *)_gsEvent;
13
+ @end
14
+
15
+ typedef void * GSEventRef;
16
+
17
+ typedef struct {
18
+ unsigned char index;
19
+ unsigned char index2;
20
+ unsigned char type;
21
+ unsigned char flags;
22
+ float sizeX;
23
+ float sizeY;
24
+ float x;
25
+ float y;
26
+ int x24;
27
+ } gs_path_info_t;
28
+
29
+ typedef struct {
30
+ int type;
31
+ short deltaX;
32
+ short deltaY;
33
+ float x3;
34
+ float x4;
35
+ float pinch1;
36
+ float pinch2;
37
+ float averageX;
38
+ float averageY;
39
+ unsigned char x9_1;
40
+ unsigned char pathCount;
41
+ } gs_hand_info_t;
42
+
43
+ id GSEventCreatePlistRepresentation(GSEventRef event);
44
+ extern CGFloat GSEventGetDeltaX(GSEventRef event);
45
+ extern CGFloat GSEventGetDeltaY(GSEventRef event);
46
+ extern int GSEventGetType(GSEventRef event);
47
+ extern int GSEventGetSubType(GSEventRef event);
48
+ extern int GSEventIsChordingHandEvent(GSEventRef event);
49
+ extern CGPoint GSEventGetInnerMostPathPosition(GSEventRef event);
50
+ extern CGPoint GSEventGetOuterMostPathPosition(GSEventRef event);
51
+ extern CGPoint GSEventGetLocationInWindow(GSEventRef event);
52
+ extern gs_hand_info_t GSEventGetHandInfo(GSEventRef event);
53
+ extern gs_path_info_t GSEventGetPathInfoAtIndex(GSEventRef event, CFIndex index);
54
+
55
+ @implementation SniffingView
56
+
57
+ -(void)eventStats:(UIEvent *)event {
58
+ void *gs_event = [event _gsEvent];
59
+ NSMutableDictionary *plist = GSEventCreatePlistRepresentation(gs_event);
60
+
61
+ NSLog(@"Raw event: %@", event);
62
+
63
+ NSLog(@"Plist data: %@", [plist objectForKey: @"Data"]);
64
+
65
+ NSMutableData *data = [NSMutableData dataWithCapacity: 60];
66
+
67
+ gs_hand_info_t gs_hand = GSEventGetHandInfo(gs_event);
68
+
69
+ [data appendBytes: &gs_hand length: sizeof(gs_hand)];
70
+
71
+ switch(gs_hand.type) {
72
+ case 1:
73
+ case 2:
74
+ case 6:
75
+ break;
76
+ default:
77
+ NSLog(@"Unexpected hand event type: %i", gs_hand.type);
78
+ }
79
+
80
+ if (gs_hand.deltaX != 1.0 && gs_hand.deltaX != 2.0) {
81
+ NSLog(@"Unknown hand event deltaX: %f", gs_hand.deltaX);
82
+ }
83
+
84
+ if (gs_hand.deltaY != 1.0 && gs_hand.deltaY != 2.0) {
85
+ NSLog(@"Unknown hand event deltaY: %f", gs_hand.deltaY);
86
+ }
87
+
88
+ if (gs_hand.x3 != 0.0) {
89
+ NSLog(@"Non-zero hand event x3: %f", gs_hand.x3);
90
+ }
91
+
92
+ if (gs_hand.x4 != 0.0) {
93
+ NSLog(@"Non-zero hand event x4: %f", gs_hand.x4);
94
+ }
95
+
96
+ if (gs_hand.pinch1 != 0) {
97
+ NSLog(@"Non-zero hand event pinch1: %f", gs_hand.pinch1);
98
+ }
99
+
100
+ if (gs_hand.pinch2 != 0) {
101
+ NSLog(@"Non-zero hand event pinch2: %f", gs_hand.pinch2);
102
+ }
103
+
104
+ if (gs_hand.x9_1 != 0) {
105
+ NSLog(@"Non-zero hand event x9_1: %i", gs_hand.x9_1);
106
+ }
107
+
108
+ if (gs_hand.pathCount != 1 && gs_hand.pathCount != 2) {
109
+ NSLog(@"Unexpected path count: %i", gs_hand.pathCount);
110
+ }
111
+
112
+ if (gs_hand.pathCount != gs_hand.deltaX || gs_hand.pathCount != gs_hand.deltaY) {
113
+ NSLog(@"Path count does not match deltas: %i vs %f/%f", gs_hand.pathCount, gs_hand.deltaX, gs_hand.deltaY);
114
+ }
115
+
116
+ float averageX = 0;
117
+ float averageY = 0;
118
+
119
+ for (int i = 0; i < gs_hand.pathCount; i++) {
120
+ gs_path_info_t gs_path = GSEventGetPathInfoAtIndex(gs_event, i);
121
+
122
+ [data appendBytes: &gs_path length: sizeof(gs_path)];
123
+
124
+ if (gs_path.index > (gs_hand.pathCount + 1)) {
125
+ NSLog(@"Unexpected path event index: %i", gs_path.index);
126
+ }
127
+
128
+ if (gs_path.index != gs_path.index2) {
129
+ NSLog(@"Unexpected path event index mismatch: %i vs %i", gs_path.index, gs_path.index2);
130
+ }
131
+
132
+ if (gs_path.type != (gs_hand.type == 6 ? 1 : 2)) {
133
+ NSLog(@"Unexpected path event type: %i", gs_path.type);
134
+ }
135
+
136
+ if (gs_hand.type == 1) {
137
+ if (gs_path.flags != 191) {
138
+ NSLog(@"Unexpected path event flags: %i", gs_path.flags);
139
+ }
140
+ } else if (gs_hand.type == 2) {
141
+ if (gs_path.flags != 0 && gs_path.flags != 255) {
142
+ NSLog(@"Unexpected path event flags: %i", gs_path.flags);
143
+ }
144
+ } else {
145
+ if (gs_path.flags != 255) {
146
+ NSLog(@"Unexpected path event flags: %i", gs_path.flags);
147
+ }
148
+ }
149
+
150
+ if (gs_path.sizeX != 1.0 || gs_path.sizeY != 1.0) {
151
+ NSLog(@"Unexpeced path event size: %f/%f", gs_path.sizeX, gs_path.sizeY);
152
+ }
153
+
154
+ averageX += gs_path.x;
155
+ averageY += gs_path.y;
156
+ }
157
+
158
+ averageX = averageX / gs_hand.pathCount;
159
+ averageY = averageY / gs_hand.pathCount;
160
+
161
+ float x = [[[plist objectForKey:@"WindowLocation"] objectForKey:@"X"] floatValue];
162
+ if (averageX != x) {
163
+ NSLog(@"Average X value doesn't match WindowLocation X: %f vs %f", averageX, x);
164
+ }
165
+
166
+ float y = [[[plist objectForKey:@"WindowLocation"] objectForKey:@"Y"] floatValue];
167
+ if (averageY != y) {
168
+ NSLog(@"Average Y value doesn't match WindowLocation Y: %f vs %f", averageY, y);
169
+ }
170
+
171
+ NSLog(@"*****");
172
+
173
+ return;
174
+ }
175
+
176
+ - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
177
+ [self eventStats: event];
178
+ [super touchesBegan: touches withEvent: event];
179
+ }
180
+
181
+ - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
182
+ [self eventStats: event];
183
+ [super touchesMoved: touches withEvent: event];
184
+ }
185
+
186
+ - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
187
+ [self eventStats: event];
188
+ [super touchesEnded: touches withEvent:event];
189
+ }
190
+
191
+ @end
@@ -0,0 +1,30 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>CFBundleDevelopmentRegion</key>
6
+ <string>English</string>
7
+ <key>CFBundleDisplayName</key>
8
+ <string>${PRODUCT_NAME}</string>
9
+ <key>CFBundleExecutable</key>
10
+ <string>${EXECUTABLE_NAME}</string>
11
+ <key>CFBundleIconFile</key>
12
+ <string></string>
13
+ <key>CFBundleIdentifier</key>
14
+ <string>com.yourcompany.${PRODUCT_NAME:rfc1034identifier}</string>
15
+ <key>CFBundleInfoDictionaryVersion</key>
16
+ <string>6.0</string>
17
+ <key>CFBundleName</key>
18
+ <string>${PRODUCT_NAME}</string>
19
+ <key>CFBundlePackageType</key>
20
+ <string>APPL</string>
21
+ <key>CFBundleSignature</key>
22
+ <string>????</string>
23
+ <key>CFBundleVersion</key>
24
+ <string>1.0</string>
25
+ <key>LSRequiresIPhoneOS</key>
26
+ <true/>
27
+ <key>NSMainNibFile</key>
28
+ <string>MainWindow</string>
29
+ </dict>
30
+ </plist>