Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Initial public release

  • Loading branch information...
commit 192e253b375e8d6713178baaee60d8734f61d7dd 0 parents
@moredip authored
Showing with 19,691 additions and 0 deletions.
  1. +4 −0 .gitignore
  2. +754 −0 Frank.xcodeproj/project.pbxproj
  3. +17 −0 Frank_Prefix.pch
  4. +20 −0 README.md
  5. +9 −0 cucumber/color_helper.rb
  6. +6 −0 cucumber/env.rb
  7. +147 −0 cucumber/frank_helper.rb
  8. +102 −0 cucumber/frankly_steps.rb
  9. +6 −0 cucumber/recordable.rb
  10. BIN  doc/Frank Architecture.graffle/QuickLook/Preview.pdf
  11. BIN  doc/Frank Architecture.graffle/QuickLook/Thumbnail.tiff
  12. +1,344 −0 doc/Frank Architecture.graffle/data.plist
  13. BIN  doc/Frank Architecture.graffle/image1.pdf
  14. BIN  doc/Frank Architecture.png
  15. +23 −0 doc/adding_frank_to_a_project.md
  16. +55 −0 doc/frankly.md
  17. +43 −0 example/EmployeeAdmin/EmployeeAdmin-Info copy.plist
  18. +43 −0 example/EmployeeAdmin/EmployeeAdmin-Info.plist
  19. +2 −0  example/EmployeeAdmin/EmployeeAdmin.xcodeproj/.gitignore
  20. +1,146 −0 example/EmployeeAdmin/EmployeeAdmin.xcodeproj/project.pbxproj
  21. +8 −0 example/EmployeeAdmin/EmployeeAdmin_Prefix.pch
  22. BIN  example/EmployeeAdmin/Shared/lib/PureMVC/PureMVC_ObjectiveC_1_1.a
  23. +54 −0 example/EmployeeAdmin/Shared/lib/PureMVC/headers/Controller.h
  24. +52 −0 example/EmployeeAdmin/Shared/lib/PureMVC/headers/Facade.h
  25. +16 −0 example/EmployeeAdmin/Shared/lib/PureMVC/headers/ICommand.h
  26. +57 −0 example/EmployeeAdmin/Shared/lib/PureMVC/headers/IController.h
  27. +135 −0 example/EmployeeAdmin/Shared/lib/PureMVC/headers/IFacade.h
  28. +84 −0 example/EmployeeAdmin/Shared/lib/PureMVC/headers/IMediator.h
  29. +50 −0 example/EmployeeAdmin/Shared/lib/PureMVC/headers/IModel.h
  30. +57 −0 example/EmployeeAdmin/Shared/lib/PureMVC/headers/INotification.h
  31. +41 −0 example/EmployeeAdmin/Shared/lib/PureMVC/headers/INotifier.h
  32. +67 −0 example/EmployeeAdmin/Shared/lib/PureMVC/headers/IObserver.h
  33. +53 −0 example/EmployeeAdmin/Shared/lib/PureMVC/headers/IProxy.h
  34. +96 −0 example/EmployeeAdmin/Shared/lib/PureMVC/headers/IView.h
  35. +50 −0 example/EmployeeAdmin/Shared/lib/PureMVC/headers/MacroCommand.h
  36. +35 −0 example/EmployeeAdmin/Shared/lib/PureMVC/headers/Mediator.h
  37. +47 −0 example/EmployeeAdmin/Shared/lib/PureMVC/headers/Model.h
  38. +52 −0 example/EmployeeAdmin/Shared/lib/PureMVC/headers/Notification.h
  39. +40 −0 example/EmployeeAdmin/Shared/lib/PureMVC/headers/Notifier.h
  40. +42 −0 example/EmployeeAdmin/Shared/lib/PureMVC/headers/Observer.h
  41. +51 −0 example/EmployeeAdmin/Shared/lib/PureMVC/headers/Proxy.h
  42. +28 −0 example/EmployeeAdmin/Shared/lib/PureMVC/headers/SimpleCommand.h
  43. +39 −0 example/EmployeeAdmin/Shared/lib/PureMVC/headers/View.h
  44. +8 −0 example/EmployeeAdmin/Shared/main.m
  45. +36 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/ApplicationFacade.h
  46. +39 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/ApplicationFacade.m
  47. +16 −0 ...le/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/controller/CreateUserCommand.h
  48. +27 −0 ...le/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/controller/CreateUserCommand.m
  49. +16 −0 ...le/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/controller/DeleteUserCommand.h
  50. +21 −0 ...le/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/controller/DeleteUserCommand.m
  51. +16 −0 .../EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/controller/GetUserRolesCommand.h
  52. +20 −0 .../EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/controller/GetUserRolesCommand.m
  53. +17 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/controller/GetUsersCommand.h
  54. +21 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/controller/GetUsersCommand.m
  55. +16 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/controller/StartupCommand.h
  56. +33 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/controller/StartupCommand.m
  57. +16 −0 ...le/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/controller/UpdateUserCommand.h
  58. +27 −0 ...le/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/controller/UpdateUserCommand.m
  59. +16 −0 ...ployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/controller/UpdateUserRolesCommand.h
  60. +21 −0 ...ployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/controller/UpdateUserRolesCommand.m
  61. +19 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/model/UserProxy.h
  62. +59 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/model/UserProxy.m
  63. +19 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/model/UserRolesProxy.h
  64. +51 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/model/UserRolesProxy.m
  65. +15 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/model/enum/UserRolesEnum.h
  66. +18 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/model/enum/UserRolesEnum.m
  67. +21 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/model/vo/UserRolesVO.h
  68. +33 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/model/vo/UserRolesVO.m
  69. +22 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/model/vo/UserVO.h
  70. +47 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/model/vo/UserVO.m
  71. +15 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/view/EmployeeAdminMediator.h
  72. +47 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/view/EmployeeAdminMediator.m
  73. +17 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/view/UserFormMediator.h
  74. +61 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/view/UserFormMediator.m
  75. +17 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/view/UserListMediator.h
  76. +59 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/view/UserListMediator.m
  77. +16 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/view/UserRolesMediator.h
  78. +52 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/view/UserRolesMediator.m
  79. +33 −0 ...e/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/view/components/EmployeeAdmin.h
  80. +57 −0 ...e/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/view/components/EmployeeAdmin.m
  81. +38 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/view/components/UserForm.h
  82. +123 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/view/components/UserForm.m
  83. +31 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/view/components/UserList.h
  84. +77 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/view/components/UserList.m
  85. +34 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/view/components/UserRoles.h
  86. +93 −0 example/EmployeeAdmin/Shared/src/org/puremvc/objectivec/demos/uikit/employeeadmin/view/components/UserRoles.m
  87. +56 −0 example/EmployeeAdmin/features/main.feature
  88. +28 −0 example/EmployeeAdmin/features/step_definitions/employee_admin_steps.rb
  89. +75 −0 example/EmployeeAdmin/features/step_definitions/frank_steps.rb
  90. +5 −0 example/EmployeeAdmin/features/support/env.rb
  91. +18 −0 example/EmployeeAdmin/iPad/AppDelegate_Pad.h
  92. +35 −0 example/EmployeeAdmin/iPad/AppDelegate_Pad.m
  93. +343 −0 example/EmployeeAdmin/iPad/MainWindow_Pad.xib
  94. +18 −0 example/EmployeeAdmin/iPhone/AppDelegate_Phone.h
  95. +35 −0 example/EmployeeAdmin/iPhone/AppDelegate_Phone.m
  96. +363 −0 example/EmployeeAdmin/iPhone/MainWindow_Phone.xib
  97. +18 −0 example/EmployeeAdmin/main.m
  98. BIN  frank_static_resources.bundle/images/file.gif
  99. BIN  frank_static_resources.bundle/images/folder-closed.gif
  100. BIN  frank_static_resources.bundle/images/folder.gif
  101. BIN  frank_static_resources.bundle/images/minus.gif
  102. BIN  frank_static_resources.bundle/images/plus.gif
  103. BIN  frank_static_resources.bundle/images/treeview-black-line.gif
  104. BIN  frank_static_resources.bundle/images/treeview-black.gif
  105. BIN  frank_static_resources.bundle/images/treeview-default-line.gif
  106. BIN  frank_static_resources.bundle/images/treeview-default.gif
  107. BIN  frank_static_resources.bundle/images/treeview-famfamfam-line.gif
  108. BIN  frank_static_resources.bundle/images/treeview-famfamfam.gif
  109. BIN  frank_static_resources.bundle/images/treeview-gray-line.gif
  110. BIN  frank_static_resources.bundle/images/treeview-gray.gif
  111. BIN  frank_static_resources.bundle/images/treeview-red-line.gif
  112. BIN  frank_static_resources.bundle/images/treeview-red.gif
  113. +75 −0 frank_static_resources.bundle/index.html
  114. +19 −0 frank_static_resources.bundle/jquery.min.js
  115. +68 −0 frank_static_resources.bundle/jquery.treeview.css
  116. +251 −0 frank_static_resources.bundle/jquery.treeview.js
  117. +481 −0 frank_static_resources.bundle/json2.js
  118. +58 −0 frank_static_resources.bundle/json_tools.js
  119. +82 −0 frank_static_resources.bundle/symbiote.js
  120. +50 −0 lib/JSON/JSON.h
  121. +68 −0 lib/JSON/NSObject+SBJSON.h
  122. +53 −0 lib/JSON/NSObject+SBJSON.m
  123. +58 −0 lib/JSON/NSString+SBJSON.h
  124. +55 −0 lib/JSON/NSString+SBJSON.m
  125. +75 −0 lib/JSON/SBJSON.h
  126. +212 −0 lib/JSON/SBJSON.m
  127. +86 −0 lib/JSON/SBJsonBase.h
  128. +78 −0 lib/JSON/SBJsonBase.m
  129. +87 −0 lib/JSON/SBJsonParser.h
  130. +475 −0 lib/JSON/SBJsonParser.m
  131. +129 −0 lib/JSON/SBJsonWriter.h
  132. +237 −0 lib/JSON/SBJsonWriter.m
  133. +289 −0 lib/cocoahttpserver/AsyncSocket.h
  134. +2,449 −0 lib/cocoahttpserver/AsyncSocket.m
  135. +14 −0 lib/cocoahttpserver/DDData.h
  136. +203 −0 lib/cocoahttpserver/DDData.m
  137. +12 −0 lib/cocoahttpserver/DDNumber.h
  138. +74 −0 lib/cocoahttpserver/DDNumber.m
  139. +52 −0 lib/cocoahttpserver/DDRange.h
  140. +70 −0 lib/cocoahttpserver/DDRange.m
  141. +43 −0 lib/cocoahttpserver/HTTPAuthenticationRequest.h
  142. +206 −0 lib/cocoahttpserver/HTTPAuthenticationRequest.m
  143. +66 −0 lib/cocoahttpserver/HTTPConnection.h
  144. +1,419 −0 lib/cocoahttpserver/HTTPConnection.m
  145. +34 −0 lib/cocoahttpserver/HTTPResponse.h
  146. +104 −0 lib/cocoahttpserver/HTTPResponse.m
  147. +59 −0 lib/cocoahttpserver/HTTPServer.h
  148. +350 −0 lib/cocoahttpserver/HTTPServer.m
  149. +21 −0 lib/cocoahttpserver/MyHTTPConnection.h
  150. +82 −0 lib/cocoahttpserver/MyHTTPConnection.m
  151. BIN  lib/uispec/UISpec.bundle/images/uibug.png
  152. BIN  lib/uispec/UISpec.bundle/images/uibug2.png
  153. +25 −0 lib/uispec/UISpec.h
  154. +179 −0 lib/uispec/UISpec.m
  155. +17 −0 lib/uispec/components/UIQuerySearchBar.h
  156. +14 −0 lib/uispec/components/UIQuerySearchBar.m
  157. +17 −0 lib/uispec/components/UIQuerySegmentedControl.h
  158. +11 −0 lib/uispec/components/UIQuerySegmentedControl.m
  159. +17 −0 lib/uispec/components/UIQueryTabBar.h
  160. +10 −0 lib/uispec/components/UIQueryTabBar.m
  161. +18 −0 lib/uispec/components/UIQueryTableView.h
  162. +50 −0 lib/uispec/components/UIQueryTableView.m
  163. +17 −0 lib/uispec/components/UIQueryTableViewCell.h
  164. +12 −0 lib/uispec/components/UIQueryTableViewCell.m
  165. +18 −0 lib/uispec/components/UIQueryWebView.h
  166. +52 −0 lib/uispec/components/UIQueryWebView.m
  167. +20 −0 lib/uispec/dsl/Recordable.h
  168. +58 −0 lib/uispec/dsl/Recordable.m
  169. +9 −0 lib/uispec/dsl/UIChildren.h
  170. +21 −0 lib/uispec/dsl/UIChildren.m
  171. +11 −0 lib/uispec/dsl/UIConsoleLog.h
  172. +75 −0 lib/uispec/dsl/UIConsoleLog.m
  173. +9 −0 lib/uispec/dsl/UIDescendants.h
  174. +30 −0 lib/uispec/dsl/UIDescendants.m
  175. +47 −0 lib/uispec/dsl/UIExpectation.h
  176. +185 −0 lib/uispec/dsl/UIExpectation.m
  177. +23 −0 lib/uispec/dsl/UIFilter.h
  178. +109 −0 lib/uispec/dsl/UIFilter.m
  179. +20 −0 lib/uispec/dsl/UILog.h
  180. +21 −0 lib/uispec/dsl/UIMatcher.h
  181. +47 −0 lib/uispec/dsl/UIMatcher.m
  182. +9 −0 lib/uispec/dsl/UIParents.h
  183. +23 −0 lib/uispec/dsl/UIParents.m
  184. +72 −0 lib/uispec/dsl/UIQuery.h
  185. +664 −0 lib/uispec/dsl/UIQuery.m
  186. +7 −0 lib/uispec/dsl/UIQueryAll.h
  187. +10 −0 lib/uispec/dsl/UIQueryAll.m
  188. +10 −0 lib/uispec/dsl/UIQueryExpectation.h
  189. +63 −0 lib/uispec/dsl/UIQueryExpectation.m
  190. +15 −0 lib/uispec/dsl/UIRedoer.h
  191. +46 −0 lib/uispec/dsl/UIRedoer.m
  192. +22 −0 lib/uispec/dsl/UISwizzle.h
  193. +37 −0 lib/uispec/dsl/UISwizzle.m
  194. +25 −0 lib/uispec/dsl/UITraversal.h
  195. +112 −0 lib/uispec/dsl/UITraversal.m
  196. +16 −0 lib/uispec/dsl/ViewFilterSwizzler.h
  197. +22 −0 lib/uispec/dsl/ViewFilterSwizzler.m
  198. +14 −0 lib/uispec/update_from_svn.rb
  199. +13 −0 lib/uispec/utils/CallCache.h
  200. +50 −0 lib/uispec/utils/CallCache.m
  201. +22 −0 lib/uispec/utils/NSNumberCreator.h
  202. +103 −0 lib/uispec/utils/NSNumberCreator.m
  203. +11 −0 lib/uispec/utils/ReturnCacher.h
  204. +73 −0 lib/uispec/utils/ReturnCacher.m
  205. +15 −0 lib/uispec/utils/UIBug.h
  206. +159 −0 lib/uispec/utils/UIBug.m
  207. +7 −0 lib/uispec/utils/UIConsole.h
  208. +62 −0 lib/uispec/utils/UIConsole.m
  209. +26 −0 lib/uispec/utils/UIInspector.h
  210. +208 −0 lib/uispec/utils/UIInspector.m
  211. +10 −0 lib/uispec/utils/UIProxy.h
  212. +42 −0 lib/uispec/utils/UIProxy.m
  213. +10 −0 lib/uispec/utils/WaitUntilIdle.h
  214. +34 −0 lib/uispec/utils/WaitUntilIdle.m
  215. +25 −0 main.m.sample
  216. +17 −0 src/DumpCommand.h
  217. +75 −0 src/DumpCommand.m
  218. +26 −0 src/FrankCommandRoute.h
  219. +59 −0 src/FrankCommandRoute.m
  220. +22 −0 src/FrankServer.h
  221. +86 −0 src/FrankServer.m
  222. +16 −0 src/MapOperationCommand.h
  223. +91 −0 src/MapOperationCommand.m
  224. +23 −0 src/MemoryLogger.h
  225. +45 −0 src/MemoryLogger.m
  226. +22 −0 src/Operation.h
  227. +87 −0 src/Operation.m
  228. +26 −0 src/RequestRouter.h
  229. +99 −0 src/RequestRouter.m
  230. +21 −0 src/RoutingHTTPConnection.h
  231. +94 −0 src/RoutingHTTPConnection.m
  232. +19 −0 src/StaticResourcesRoute.h
  233. +47 −0 src/StaticResourcesRoute.m
  234. +17 −0 src/UISpecCommandReceiver.h
  235. +67 −0 src/UISpecCommandReceiver.m
4 .gitignore
@@ -0,0 +1,4 @@
+build
+Frank.xcodeproj/*.mode1v3
+Frank.xcodeproj/*.pbxuser
+Frank.xcodeproj/ThoughtWorks.mode2v3
754 Frank.xcodeproj/project.pbxproj
@@ -0,0 +1,754 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 45;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ AA747D9F0F9514B9006C5449 /* Frank_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = AA747D9E0F9514B9006C5449 /* Frank_Prefix.pch */; };
+ AACBBE4A0F95108600F1A2B1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AACBBE490F95108600F1A2B1 /* Foundation.framework */; };
+ D629926B11AB2D1F00CE0FB0 /* AsyncSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = D629926911AB2D1F00CE0FB0 /* AsyncSocket.h */; };
+ D629926C11AB2D1F00CE0FB0 /* AsyncSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = D629926A11AB2D1F00CE0FB0 /* AsyncSocket.m */; };
+ D629928111AB2D4C00CE0FB0 /* DDData.h in Headers */ = {isa = PBXBuildFile; fileRef = D629927111AB2D4C00CE0FB0 /* DDData.h */; };
+ D629928211AB2D4C00CE0FB0 /* DDData.m in Sources */ = {isa = PBXBuildFile; fileRef = D629927211AB2D4C00CE0FB0 /* DDData.m */; };
+ D629928311AB2D4C00CE0FB0 /* DDNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = D629927311AB2D4C00CE0FB0 /* DDNumber.h */; };
+ D629928411AB2D4C00CE0FB0 /* DDNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = D629927411AB2D4C00CE0FB0 /* DDNumber.m */; };
+ D629928511AB2D4C00CE0FB0 /* DDRange.h in Headers */ = {isa = PBXBuildFile; fileRef = D629927511AB2D4C00CE0FB0 /* DDRange.h */; };
+ D629928611AB2D4C00CE0FB0 /* DDRange.m in Sources */ = {isa = PBXBuildFile; fileRef = D629927611AB2D4C00CE0FB0 /* DDRange.m */; };
+ D629928711AB2D4C00CE0FB0 /* HTTPAuthenticationRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D629927711AB2D4C00CE0FB0 /* HTTPAuthenticationRequest.h */; };
+ D629928811AB2D4C00CE0FB0 /* HTTPAuthenticationRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D629927811AB2D4C00CE0FB0 /* HTTPAuthenticationRequest.m */; };
+ D629928911AB2D4C00CE0FB0 /* HTTPConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = D629927911AB2D4C00CE0FB0 /* HTTPConnection.h */; };
+ D629928A11AB2D4C00CE0FB0 /* HTTPConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = D629927A11AB2D4C00CE0FB0 /* HTTPConnection.m */; };
+ D629928B11AB2D4C00CE0FB0 /* HTTPResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = D629927B11AB2D4C00CE0FB0 /* HTTPResponse.h */; };
+ D629928C11AB2D4C00CE0FB0 /* HTTPResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = D629927C11AB2D4C00CE0FB0 /* HTTPResponse.m */; };
+ D629928D11AB2D4C00CE0FB0 /* HTTPServer.h in Headers */ = {isa = PBXBuildFile; fileRef = D629927D11AB2D4C00CE0FB0 /* HTTPServer.h */; };
+ D629928E11AB2D4C00CE0FB0 /* HTTPServer.m in Sources */ = {isa = PBXBuildFile; fileRef = D629927E11AB2D4C00CE0FB0 /* HTTPServer.m */; };
+ D629928F11AB2D4C00CE0FB0 /* MyHTTPConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = D629927F11AB2D4C00CE0FB0 /* MyHTTPConnection.h */; };
+ D629929011AB2D4C00CE0FB0 /* MyHTTPConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = D629928011AB2D4C00CE0FB0 /* MyHTTPConnection.m */; };
+ D62992ED11AB2DDD00CE0FB0 /* UIQuerySearchBar.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992AD11AB2DDD00CE0FB0 /* UIQuerySearchBar.h */; };
+ D62992EE11AB2DDD00CE0FB0 /* UIQuerySearchBar.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992AE11AB2DDD00CE0FB0 /* UIQuerySearchBar.m */; };
+ D62992EF11AB2DDD00CE0FB0 /* UIQuerySegmentedControl.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992AF11AB2DDD00CE0FB0 /* UIQuerySegmentedControl.h */; };
+ D62992F011AB2DDD00CE0FB0 /* UIQuerySegmentedControl.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992B011AB2DDD00CE0FB0 /* UIQuerySegmentedControl.m */; };
+ D62992F111AB2DDD00CE0FB0 /* UIQueryTabBar.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992B111AB2DDD00CE0FB0 /* UIQueryTabBar.h */; };
+ D62992F211AB2DDD00CE0FB0 /* UIQueryTabBar.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992B211AB2DDD00CE0FB0 /* UIQueryTabBar.m */; };
+ D62992F311AB2DDD00CE0FB0 /* UIQueryTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992B311AB2DDD00CE0FB0 /* UIQueryTableView.h */; };
+ D62992F411AB2DDD00CE0FB0 /* UIQueryTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992B411AB2DDD00CE0FB0 /* UIQueryTableView.m */; };
+ D62992F511AB2DDD00CE0FB0 /* UIQueryTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992B511AB2DDD00CE0FB0 /* UIQueryTableViewCell.h */; };
+ D62992F611AB2DDD00CE0FB0 /* UIQueryTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992B611AB2DDD00CE0FB0 /* UIQueryTableViewCell.m */; };
+ D62992F711AB2DDD00CE0FB0 /* UIQueryWebView.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992B711AB2DDD00CE0FB0 /* UIQueryWebView.h */; };
+ D62992F811AB2DDD00CE0FB0 /* UIQueryWebView.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992B811AB2DDD00CE0FB0 /* UIQueryWebView.m */; };
+ D62992F911AB2DDD00CE0FB0 /* Recordable.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992BA11AB2DDD00CE0FB0 /* Recordable.h */; };
+ D62992FA11AB2DDD00CE0FB0 /* Recordable.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992BB11AB2DDD00CE0FB0 /* Recordable.m */; };
+ D62992FB11AB2DDD00CE0FB0 /* UIChildren.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992BC11AB2DDD00CE0FB0 /* UIChildren.h */; };
+ D62992FC11AB2DDD00CE0FB0 /* UIChildren.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992BD11AB2DDD00CE0FB0 /* UIChildren.m */; };
+ D62992FD11AB2DDD00CE0FB0 /* UIConsoleLog.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992BE11AB2DDD00CE0FB0 /* UIConsoleLog.h */; };
+ D62992FE11AB2DDD00CE0FB0 /* UIConsoleLog.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992BF11AB2DDD00CE0FB0 /* UIConsoleLog.m */; };
+ D62992FF11AB2DDD00CE0FB0 /* UIDescendants.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992C011AB2DDD00CE0FB0 /* UIDescendants.h */; };
+ D629930011AB2DDD00CE0FB0 /* UIDescendants.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992C111AB2DDD00CE0FB0 /* UIDescendants.m */; };
+ D629930111AB2DDD00CE0FB0 /* UIExpectation.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992C211AB2DDD00CE0FB0 /* UIExpectation.h */; };
+ D629930211AB2DDD00CE0FB0 /* UIExpectation.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992C311AB2DDD00CE0FB0 /* UIExpectation.m */; };
+ D629930311AB2DDD00CE0FB0 /* UIFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992C411AB2DDD00CE0FB0 /* UIFilter.h */; };
+ D629930411AB2DDD00CE0FB0 /* UIFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992C511AB2DDD00CE0FB0 /* UIFilter.m */; };
+ D629930511AB2DDD00CE0FB0 /* UILog.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992C611AB2DDD00CE0FB0 /* UILog.h */; };
+ D629930611AB2DDD00CE0FB0 /* UIMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992C711AB2DDD00CE0FB0 /* UIMatcher.h */; };
+ D629930711AB2DDD00CE0FB0 /* UIMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992C811AB2DDD00CE0FB0 /* UIMatcher.m */; };
+ D629930811AB2DDD00CE0FB0 /* UIParents.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992C911AB2DDD00CE0FB0 /* UIParents.h */; };
+ D629930911AB2DDD00CE0FB0 /* UIParents.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992CA11AB2DDD00CE0FB0 /* UIParents.m */; };
+ D629930A11AB2DDD00CE0FB0 /* UIQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992CB11AB2DDD00CE0FB0 /* UIQuery.h */; };
+ D629930B11AB2DDD00CE0FB0 /* UIQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992CC11AB2DDD00CE0FB0 /* UIQuery.m */; };
+ D629930C11AB2DDD00CE0FB0 /* UIQueryAll.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992CD11AB2DDD00CE0FB0 /* UIQueryAll.h */; };
+ D629930D11AB2DDD00CE0FB0 /* UIQueryAll.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992CE11AB2DDD00CE0FB0 /* UIQueryAll.m */; };
+ D629930E11AB2DDD00CE0FB0 /* UIQueryExpectation.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992CF11AB2DDD00CE0FB0 /* UIQueryExpectation.h */; };
+ D629930F11AB2DDD00CE0FB0 /* UIQueryExpectation.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992D011AB2DDD00CE0FB0 /* UIQueryExpectation.m */; };
+ D629931011AB2DDD00CE0FB0 /* UIRedoer.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992D111AB2DDD00CE0FB0 /* UIRedoer.h */; };
+ D629931111AB2DDD00CE0FB0 /* UIRedoer.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992D211AB2DDD00CE0FB0 /* UIRedoer.m */; };
+ D629931211AB2DDD00CE0FB0 /* UISwizzle.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992D311AB2DDD00CE0FB0 /* UISwizzle.h */; };
+ D629931311AB2DDD00CE0FB0 /* UISwizzle.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992D411AB2DDD00CE0FB0 /* UISwizzle.m */; };
+ D629931411AB2DDD00CE0FB0 /* UITraversal.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992D511AB2DDD00CE0FB0 /* UITraversal.h */; };
+ D629931511AB2DDD00CE0FB0 /* UITraversal.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992D611AB2DDD00CE0FB0 /* UITraversal.m */; };
+ D629931611AB2DDD00CE0FB0 /* ViewFilterSwizzler.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992D711AB2DDD00CE0FB0 /* ViewFilterSwizzler.h */; };
+ D629931711AB2DDD00CE0FB0 /* ViewFilterSwizzler.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992D811AB2DDD00CE0FB0 /* ViewFilterSwizzler.m */; };
+ D629931811AB2DDD00CE0FB0 /* UISpec.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992DA11AB2DDD00CE0FB0 /* UISpec.h */; };
+ D629931911AB2DDD00CE0FB0 /* UISpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992DB11AB2DDD00CE0FB0 /* UISpec.m */; };
+ D629931A11AB2DDD00CE0FB0 /* CallCache.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992DD11AB2DDD00CE0FB0 /* CallCache.h */; };
+ D629931B11AB2DDD00CE0FB0 /* CallCache.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992DE11AB2DDD00CE0FB0 /* CallCache.m */; };
+ D629931C11AB2DDD00CE0FB0 /* NSNumberCreator.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992DF11AB2DDD00CE0FB0 /* NSNumberCreator.h */; };
+ D629931D11AB2DDD00CE0FB0 /* NSNumberCreator.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992E011AB2DDD00CE0FB0 /* NSNumberCreator.m */; };
+ D629931E11AB2DDD00CE0FB0 /* ReturnCacher.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992E111AB2DDD00CE0FB0 /* ReturnCacher.h */; };
+ D629931F11AB2DDD00CE0FB0 /* ReturnCacher.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992E211AB2DDD00CE0FB0 /* ReturnCacher.m */; };
+ D629932011AB2DDD00CE0FB0 /* UIBug.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992E311AB2DDD00CE0FB0 /* UIBug.h */; };
+ D629932111AB2DDD00CE0FB0 /* UIBug.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992E411AB2DDD00CE0FB0 /* UIBug.m */; };
+ D629932211AB2DDD00CE0FB0 /* UIConsole.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992E511AB2DDD00CE0FB0 /* UIConsole.h */; };
+ D629932311AB2DDD00CE0FB0 /* UIConsole.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992E611AB2DDD00CE0FB0 /* UIConsole.m */; };
+ D629932411AB2DDD00CE0FB0 /* UIInspector.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992E711AB2DDD00CE0FB0 /* UIInspector.h */; };
+ D629932511AB2DDD00CE0FB0 /* UIInspector.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992E811AB2DDD00CE0FB0 /* UIInspector.m */; };
+ D629932611AB2DDD00CE0FB0 /* UIProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992E911AB2DDD00CE0FB0 /* UIProxy.h */; };
+ D629932711AB2DDD00CE0FB0 /* UIProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992EA11AB2DDD00CE0FB0 /* UIProxy.m */; };
+ D629932811AB2DDD00CE0FB0 /* WaitUntilIdle.h in Headers */ = {isa = PBXBuildFile; fileRef = D62992EB11AB2DDD00CE0FB0 /* WaitUntilIdle.h */; };
+ D629932911AB2DDD00CE0FB0 /* WaitUntilIdle.m in Sources */ = {isa = PBXBuildFile; fileRef = D62992EC11AB2DDD00CE0FB0 /* WaitUntilIdle.m */; };
+ D629938011AB2DF300CE0FB0 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D629937F11AB2DF300CE0FB0 /* UIKit.framework */; };
+ D6D05CB311C883AA0081C5A5 /* DumpCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D6D05CA111C883AA0081C5A5 /* DumpCommand.h */; };
+ D6D05CB411C883AA0081C5A5 /* DumpCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = D6D05CA211C883AA0081C5A5 /* DumpCommand.m */; };
+ D6D05CB511C883AA0081C5A5 /* FrankCommandRoute.h in Headers */ = {isa = PBXBuildFile; fileRef = D6D05CA311C883AA0081C5A5 /* FrankCommandRoute.h */; };
+ D6D05CB611C883AA0081C5A5 /* FrankCommandRoute.m in Sources */ = {isa = PBXBuildFile; fileRef = D6D05CA411C883AA0081C5A5 /* FrankCommandRoute.m */; };
+ D6D05CB711C883AA0081C5A5 /* FrankServer.h in Headers */ = {isa = PBXBuildFile; fileRef = D6D05CA511C883AA0081C5A5 /* FrankServer.h */; };
+ D6D05CB811C883AA0081C5A5 /* FrankServer.m in Sources */ = {isa = PBXBuildFile; fileRef = D6D05CA611C883AA0081C5A5 /* FrankServer.m */; };
+ D6D05CB911C883AA0081C5A5 /* MapOperationCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D6D05CA711C883AA0081C5A5 /* MapOperationCommand.h */; };
+ D6D05CBA11C883AA0081C5A5 /* MapOperationCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = D6D05CA811C883AA0081C5A5 /* MapOperationCommand.m */; };
+ D6D05CBB11C883AA0081C5A5 /* MemoryLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = D6D05CA911C883AA0081C5A5 /* MemoryLogger.h */; };
+ D6D05CBC11C883AA0081C5A5 /* MemoryLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = D6D05CAA11C883AA0081C5A5 /* MemoryLogger.m */; };
+ D6D05CBD11C883AA0081C5A5 /* RequestRouter.h in Headers */ = {isa = PBXBuildFile; fileRef = D6D05CAB11C883AA0081C5A5 /* RequestRouter.h */; };
+ D6D05CBE11C883AA0081C5A5 /* RequestRouter.m in Sources */ = {isa = PBXBuildFile; fileRef = D6D05CAC11C883AA0081C5A5 /* RequestRouter.m */; };
+ D6D05CBF11C883AA0081C5A5 /* RoutingHTTPConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = D6D05CAD11C883AA0081C5A5 /* RoutingHTTPConnection.h */; };
+ D6D05CC011C883AA0081C5A5 /* RoutingHTTPConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = D6D05CAE11C883AA0081C5A5 /* RoutingHTTPConnection.m */; };
+ D6D05CC111C883AA0081C5A5 /* StaticResourcesRoute.h in Headers */ = {isa = PBXBuildFile; fileRef = D6D05CAF11C883AA0081C5A5 /* StaticResourcesRoute.h */; };
+ D6D05CC211C883AA0081C5A5 /* StaticResourcesRoute.m in Sources */ = {isa = PBXBuildFile; fileRef = D6D05CB011C883AA0081C5A5 /* StaticResourcesRoute.m */; };
+ D6D05CC311C883AA0081C5A5 /* UISpecCommandReceiver.h in Headers */ = {isa = PBXBuildFile; fileRef = D6D05CB111C883AA0081C5A5 /* UISpecCommandReceiver.h */; };
+ D6D05CC411C883AA0081C5A5 /* UISpecCommandReceiver.m in Sources */ = {isa = PBXBuildFile; fileRef = D6D05CB211C883AA0081C5A5 /* UISpecCommandReceiver.m */; };
+ D6D79B5D11D7FB8B003E0E60 /* Operation.h in Headers */ = {isa = PBXBuildFile; fileRef = D6D79B5B11D7FB8B003E0E60 /* Operation.h */; };
+ D6D79B5E11D7FB8B003E0E60 /* Operation.m in Sources */ = {isa = PBXBuildFile; fileRef = D6D79B5C11D7FB8B003E0E60 /* Operation.m */; };
+ D6E7B47A11B36D42005CAA34 /* JSON.h in Headers */ = {isa = PBXBuildFile; fileRef = D6E7B46D11B36D42005CAA34 /* JSON.h */; };
+ D6E7B47B11B36D42005CAA34 /* NSObject+SBJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = D6E7B46E11B36D42005CAA34 /* NSObject+SBJSON.h */; };
+ D6E7B47C11B36D42005CAA34 /* NSObject+SBJSON.m in Sources */ = {isa = PBXBuildFile; fileRef = D6E7B46F11B36D42005CAA34 /* NSObject+SBJSON.m */; };
+ D6E7B47D11B36D42005CAA34 /* NSString+SBJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = D6E7B47011B36D42005CAA34 /* NSString+SBJSON.h */; };
+ D6E7B47E11B36D42005CAA34 /* NSString+SBJSON.m in Sources */ = {isa = PBXBuildFile; fileRef = D6E7B47111B36D42005CAA34 /* NSString+SBJSON.m */; };
+ D6E7B47F11B36D42005CAA34 /* SBJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = D6E7B47211B36D42005CAA34 /* SBJSON.h */; };
+ D6E7B48011B36D42005CAA34 /* SBJSON.m in Sources */ = {isa = PBXBuildFile; fileRef = D6E7B47311B36D42005CAA34 /* SBJSON.m */; };
+ D6E7B48111B36D42005CAA34 /* SBJsonBase.h in Headers */ = {isa = PBXBuildFile; fileRef = D6E7B47411B36D42005CAA34 /* SBJsonBase.h */; };
+ D6E7B48211B36D42005CAA34 /* SBJsonBase.m in Sources */ = {isa = PBXBuildFile; fileRef = D6E7B47511B36D42005CAA34 /* SBJsonBase.m */; };
+ D6E7B48311B36D42005CAA34 /* SBJsonParser.h in Headers */ = {isa = PBXBuildFile; fileRef = D6E7B47611B36D42005CAA34 /* SBJsonParser.h */; };
+ D6E7B48411B36D42005CAA34 /* SBJsonParser.m in Sources */ = {isa = PBXBuildFile; fileRef = D6E7B47711B36D42005CAA34 /* SBJsonParser.m */; };
+ D6E7B48511B36D42005CAA34 /* SBJsonWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = D6E7B47811B36D42005CAA34 /* SBJsonWriter.h */; };
+ D6E7B48611B36D42005CAA34 /* SBJsonWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = D6E7B47911B36D42005CAA34 /* SBJsonWriter.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ AA747D9E0F9514B9006C5449 /* Frank_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Frank_Prefix.pch; sourceTree = SOURCE_ROOT; };
+ AACBBE490F95108600F1A2B1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ D2AAC07E0554694100DB518D /* libFrank.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libFrank.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ D629926911AB2D1F00CE0FB0 /* AsyncSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AsyncSocket.h; path = lib/cocoahttpserver/AsyncSocket.h; sourceTree = "<group>"; };
+ D629926A11AB2D1F00CE0FB0 /* AsyncSocket.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AsyncSocket.m; path = lib/cocoahttpserver/AsyncSocket.m; sourceTree = "<group>"; };
+ D629927111AB2D4C00CE0FB0 /* DDData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DDData.h; path = lib/cocoahttpserver/DDData.h; sourceTree = "<group>"; };
+ D629927211AB2D4C00CE0FB0 /* DDData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DDData.m; path = lib/cocoahttpserver/DDData.m; sourceTree = "<group>"; };
+ D629927311AB2D4C00CE0FB0 /* DDNumber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DDNumber.h; path = lib/cocoahttpserver/DDNumber.h; sourceTree = "<group>"; };
+ D629927411AB2D4C00CE0FB0 /* DDNumber.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DDNumber.m; path = lib/cocoahttpserver/DDNumber.m; sourceTree = "<group>"; };
+ D629927511AB2D4C00CE0FB0 /* DDRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DDRange.h; path = lib/cocoahttpserver/DDRange.h; sourceTree = "<group>"; };
+ D629927611AB2D4C00CE0FB0 /* DDRange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DDRange.m; path = lib/cocoahttpserver/DDRange.m; sourceTree = "<group>"; };
+ D629927711AB2D4C00CE0FB0 /* HTTPAuthenticationRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTTPAuthenticationRequest.h; path = lib/cocoahttpserver/HTTPAuthenticationRequest.h; sourceTree = "<group>"; };
+ D629927811AB2D4C00CE0FB0 /* HTTPAuthenticationRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HTTPAuthenticationRequest.m; path = lib/cocoahttpserver/HTTPAuthenticationRequest.m; sourceTree = "<group>"; };
+ D629927911AB2D4C00CE0FB0 /* HTTPConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTTPConnection.h; path = lib/cocoahttpserver/HTTPConnection.h; sourceTree = "<group>"; };
+ D629927A11AB2D4C00CE0FB0 /* HTTPConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HTTPConnection.m; path = lib/cocoahttpserver/HTTPConnection.m; sourceTree = "<group>"; };
+ D629927B11AB2D4C00CE0FB0 /* HTTPResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTTPResponse.h; path = lib/cocoahttpserver/HTTPResponse.h; sourceTree = "<group>"; };
+ D629927C11AB2D4C00CE0FB0 /* HTTPResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HTTPResponse.m; path = lib/cocoahttpserver/HTTPResponse.m; sourceTree = "<group>"; };
+ D629927D11AB2D4C00CE0FB0 /* HTTPServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTTPServer.h; path = lib/cocoahttpserver/HTTPServer.h; sourceTree = "<group>"; };
+ D629927E11AB2D4C00CE0FB0 /* HTTPServer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HTTPServer.m; path = lib/cocoahttpserver/HTTPServer.m; sourceTree = "<group>"; };
+ D629927F11AB2D4C00CE0FB0 /* MyHTTPConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MyHTTPConnection.h; path = lib/cocoahttpserver/MyHTTPConnection.h; sourceTree = "<group>"; };
+ D629928011AB2D4C00CE0FB0 /* MyHTTPConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MyHTTPConnection.m; path = lib/cocoahttpserver/MyHTTPConnection.m; sourceTree = "<group>"; };
+ D62992AD11AB2DDD00CE0FB0 /* UIQuerySearchBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIQuerySearchBar.h; sourceTree = "<group>"; };
+ D62992AE11AB2DDD00CE0FB0 /* UIQuerySearchBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIQuerySearchBar.m; sourceTree = "<group>"; };
+ D62992AF11AB2DDD00CE0FB0 /* UIQuerySegmentedControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIQuerySegmentedControl.h; sourceTree = "<group>"; };
+ D62992B011AB2DDD00CE0FB0 /* UIQuerySegmentedControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIQuerySegmentedControl.m; sourceTree = "<group>"; };
+ D62992B111AB2DDD00CE0FB0 /* UIQueryTabBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIQueryTabBar.h; sourceTree = "<group>"; };
+ D62992B211AB2DDD00CE0FB0 /* UIQueryTabBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIQueryTabBar.m; sourceTree = "<group>"; };
+ D62992B311AB2DDD00CE0FB0 /* UIQueryTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIQueryTableView.h; sourceTree = "<group>"; };
+ D62992B411AB2DDD00CE0FB0 /* UIQueryTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIQueryTableView.m; sourceTree = "<group>"; };
+ D62992B511AB2DDD00CE0FB0 /* UIQueryTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIQueryTableViewCell.h; sourceTree = "<group>"; };
+ D62992B611AB2DDD00CE0FB0 /* UIQueryTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIQueryTableViewCell.m; sourceTree = "<group>"; };
+ D62992B711AB2DDD00CE0FB0 /* UIQueryWebView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIQueryWebView.h; sourceTree = "<group>"; };
+ D62992B811AB2DDD00CE0FB0 /* UIQueryWebView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIQueryWebView.m; sourceTree = "<group>"; };
+ D62992BA11AB2DDD00CE0FB0 /* Recordable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Recordable.h; sourceTree = "<group>"; };
+ D62992BB11AB2DDD00CE0FB0 /* Recordable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Recordable.m; sourceTree = "<group>"; };
+ D62992BC11AB2DDD00CE0FB0 /* UIChildren.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIChildren.h; sourceTree = "<group>"; };
+ D62992BD11AB2DDD00CE0FB0 /* UIChildren.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIChildren.m; sourceTree = "<group>"; };
+ D62992BE11AB2DDD00CE0FB0 /* UIConsoleLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIConsoleLog.h; sourceTree = "<group>"; };
+ D62992BF11AB2DDD00CE0FB0 /* UIConsoleLog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIConsoleLog.m; sourceTree = "<group>"; };
+ D62992C011AB2DDD00CE0FB0 /* UIDescendants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIDescendants.h; sourceTree = "<group>"; };
+ D62992C111AB2DDD00CE0FB0 /* UIDescendants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIDescendants.m; sourceTree = "<group>"; };
+ D62992C211AB2DDD00CE0FB0 /* UIExpectation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIExpectation.h; sourceTree = "<group>"; };
+ D62992C311AB2DDD00CE0FB0 /* UIExpectation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIExpectation.m; sourceTree = "<group>"; };
+ D62992C411AB2DDD00CE0FB0 /* UIFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIFilter.h; sourceTree = "<group>"; };
+ D62992C511AB2DDD00CE0FB0 /* UIFilter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIFilter.m; sourceTree = "<group>"; };
+ D62992C611AB2DDD00CE0FB0 /* UILog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UILog.h; sourceTree = "<group>"; };
+ D62992C711AB2DDD00CE0FB0 /* UIMatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIMatcher.h; sourceTree = "<group>"; };
+ D62992C811AB2DDD00CE0FB0 /* UIMatcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIMatcher.m; sourceTree = "<group>"; };
+ D62992C911AB2DDD00CE0FB0 /* UIParents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIParents.h; sourceTree = "<group>"; };
+ D62992CA11AB2DDD00CE0FB0 /* UIParents.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIParents.m; sourceTree = "<group>"; };
+ D62992CB11AB2DDD00CE0FB0 /* UIQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIQuery.h; sourceTree = "<group>"; };
+ D62992CC11AB2DDD00CE0FB0 /* UIQuery.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIQuery.m; sourceTree = "<group>"; };
+ D62992CD11AB2DDD00CE0FB0 /* UIQueryAll.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIQueryAll.h; sourceTree = "<group>"; };
+ D62992CE11AB2DDD00CE0FB0 /* UIQueryAll.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIQueryAll.m; sourceTree = "<group>"; };
+ D62992CF11AB2DDD00CE0FB0 /* UIQueryExpectation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIQueryExpectation.h; sourceTree = "<group>"; };
+ D62992D011AB2DDD00CE0FB0 /* UIQueryExpectation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIQueryExpectation.m; sourceTree = "<group>"; };
+ D62992D111AB2DDD00CE0FB0 /* UIRedoer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIRedoer.h; sourceTree = "<group>"; };
+ D62992D211AB2DDD00CE0FB0 /* UIRedoer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIRedoer.m; sourceTree = "<group>"; };
+ D62992D311AB2DDD00CE0FB0 /* UISwizzle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UISwizzle.h; sourceTree = "<group>"; };
+ D62992D411AB2DDD00CE0FB0 /* UISwizzle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UISwizzle.m; sourceTree = "<group>"; };
+ D62992D511AB2DDD00CE0FB0 /* UITraversal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UITraversal.h; sourceTree = "<group>"; };
+ D62992D611AB2DDD00CE0FB0 /* UITraversal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UITraversal.m; sourceTree = "<group>"; };
+ D62992D711AB2DDD00CE0FB0 /* ViewFilterSwizzler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewFilterSwizzler.h; sourceTree = "<group>"; };
+ D62992D811AB2DDD00CE0FB0 /* ViewFilterSwizzler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewFilterSwizzler.m; sourceTree = "<group>"; };
+ D62992D911AB2DDD00CE0FB0 /* UISpec.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = UISpec.bundle; sourceTree = "<group>"; };
+ D62992DA11AB2DDD00CE0FB0 /* UISpec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UISpec.h; sourceTree = "<group>"; };
+ D62992DB11AB2DDD00CE0FB0 /* UISpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UISpec.m; sourceTree = "<group>"; };
+ D62992DD11AB2DDD00CE0FB0 /* CallCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CallCache.h; sourceTree = "<group>"; };
+ D62992DE11AB2DDD00CE0FB0 /* CallCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CallCache.m; sourceTree = "<group>"; };
+ D62992DF11AB2DDD00CE0FB0 /* NSNumberCreator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSNumberCreator.h; sourceTree = "<group>"; };
+ D62992E011AB2DDD00CE0FB0 /* NSNumberCreator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSNumberCreator.m; sourceTree = "<group>"; };
+ D62992E111AB2DDD00CE0FB0 /* ReturnCacher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReturnCacher.h; sourceTree = "<group>"; };
+ D62992E211AB2DDD00CE0FB0 /* ReturnCacher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ReturnCacher.m; sourceTree = "<group>"; };
+ D62992E311AB2DDD00CE0FB0 /* UIBug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIBug.h; sourceTree = "<group>"; };
+ D62992E411AB2DDD00CE0FB0 /* UIBug.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIBug.m; sourceTree = "<group>"; };
+ D62992E511AB2DDD00CE0FB0 /* UIConsole.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIConsole.h; sourceTree = "<group>"; };
+ D62992E611AB2DDD00CE0FB0 /* UIConsole.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIConsole.m; sourceTree = "<group>"; };
+ D62992E711AB2DDD00CE0FB0 /* UIInspector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIInspector.h; sourceTree = "<group>"; };
+ D62992E811AB2DDD00CE0FB0 /* UIInspector.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIInspector.m; sourceTree = "<group>"; };
+ D62992E911AB2DDD00CE0FB0 /* UIProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIProxy.h; sourceTree = "<group>"; };
+ D62992EA11AB2DDD00CE0FB0 /* UIProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIProxy.m; sourceTree = "<group>"; };
+ D62992EB11AB2DDD00CE0FB0 /* WaitUntilIdle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WaitUntilIdle.h; sourceTree = "<group>"; };
+ D62992EC11AB2DDD00CE0FB0 /* WaitUntilIdle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WaitUntilIdle.m; sourceTree = "<group>"; };
+ D629937F11AB2DF300CE0FB0 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+ D62AEFAA11B4897B00B824F3 /* env.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = env.rb; sourceTree = "<group>"; };
+ D62AEFAB11B4897B00B824F3 /* frank_helper.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = frank_helper.rb; sourceTree = "<group>"; };
+ D6782D8511BC423900FD0CE1 /* frank_static_resources.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = frank_static_resources.bundle; sourceTree = "<group>"; };
+ D6D05CA111C883AA0081C5A5 /* DumpCommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DumpCommand.h; path = src/DumpCommand.h; sourceTree = "<group>"; };
+ D6D05CA211C883AA0081C5A5 /* DumpCommand.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DumpCommand.m; path = src/DumpCommand.m; sourceTree = "<group>"; };
+ D6D05CA311C883AA0081C5A5 /* FrankCommandRoute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FrankCommandRoute.h; path = src/FrankCommandRoute.h; sourceTree = "<group>"; };
+ D6D05CA411C883AA0081C5A5 /* FrankCommandRoute.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FrankCommandRoute.m; path = src/FrankCommandRoute.m; sourceTree = "<group>"; };
+ D6D05CA511C883AA0081C5A5 /* FrankServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FrankServer.h; path = src/FrankServer.h; sourceTree = "<group>"; };
+ D6D05CA611C883AA0081C5A5 /* FrankServer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FrankServer.m; path = src/FrankServer.m; sourceTree = "<group>"; };
+ D6D05CA711C883AA0081C5A5 /* MapOperationCommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MapOperationCommand.h; path = src/MapOperationCommand.h; sourceTree = "<group>"; };
+ D6D05CA811C883AA0081C5A5 /* MapOperationCommand.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MapOperationCommand.m; path = src/MapOperationCommand.m; sourceTree = "<group>"; };
+ D6D05CA911C883AA0081C5A5 /* MemoryLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MemoryLogger.h; path = src/MemoryLogger.h; sourceTree = "<group>"; };
+ D6D05CAA11C883AA0081C5A5 /* MemoryLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MemoryLogger.m; path = src/MemoryLogger.m; sourceTree = "<group>"; };
+ D6D05CAB11C883AA0081C5A5 /* RequestRouter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RequestRouter.h; path = src/RequestRouter.h; sourceTree = "<group>"; };
+ D6D05CAC11C883AA0081C5A5 /* RequestRouter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RequestRouter.m; path = src/RequestRouter.m; sourceTree = "<group>"; };
+ D6D05CAD11C883AA0081C5A5 /* RoutingHTTPConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RoutingHTTPConnection.h; path = src/RoutingHTTPConnection.h; sourceTree = "<group>"; };
+ D6D05CAE11C883AA0081C5A5 /* RoutingHTTPConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RoutingHTTPConnection.m; path = src/RoutingHTTPConnection.m; sourceTree = "<group>"; };
+ D6D05CAF11C883AA0081C5A5 /* StaticResourcesRoute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StaticResourcesRoute.h; path = src/StaticResourcesRoute.h; sourceTree = "<group>"; };
+ D6D05CB011C883AA0081C5A5 /* StaticResourcesRoute.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = StaticResourcesRoute.m; path = src/StaticResourcesRoute.m; sourceTree = "<group>"; };
+ D6D05CB111C883AA0081C5A5 /* UISpecCommandReceiver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UISpecCommandReceiver.h; path = src/UISpecCommandReceiver.h; sourceTree = "<group>"; };
+ D6D05CB211C883AA0081C5A5 /* UISpecCommandReceiver.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = UISpecCommandReceiver.m; path = src/UISpecCommandReceiver.m; sourceTree = "<group>"; };
+ D6D79B5B11D7FB8B003E0E60 /* Operation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Operation.h; path = src/Operation.h; sourceTree = "<group>"; };
+ D6D79B5C11D7FB8B003E0E60 /* Operation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Operation.m; path = src/Operation.m; sourceTree = "<group>"; };
+ D6E7B46D11B36D42005CAA34 /* JSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSON.h; sourceTree = "<group>"; };
+ D6E7B46E11B36D42005CAA34 /* NSObject+SBJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+SBJSON.h"; sourceTree = "<group>"; };
+ D6E7B46F11B36D42005CAA34 /* NSObject+SBJSON.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+SBJSON.m"; sourceTree = "<group>"; };
+ D6E7B47011B36D42005CAA34 /* NSString+SBJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+SBJSON.h"; sourceTree = "<group>"; };
+ D6E7B47111B36D42005CAA34 /* NSString+SBJSON.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+SBJSON.m"; sourceTree = "<group>"; };
+ D6E7B47211B36D42005CAA34 /* SBJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJSON.h; sourceTree = "<group>"; };
+ D6E7B47311B36D42005CAA34 /* SBJSON.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SBJSON.m; sourceTree = "<group>"; };
+ D6E7B47411B36D42005CAA34 /* SBJsonBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJsonBase.h; sourceTree = "<group>"; };
+ D6E7B47511B36D42005CAA34 /* SBJsonBase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SBJsonBase.m; sourceTree = "<group>"; };
+ D6E7B47611B36D42005CAA34 /* SBJsonParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJsonParser.h; sourceTree = "<group>"; };
+ D6E7B47711B36D42005CAA34 /* SBJsonParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SBJsonParser.m; sourceTree = "<group>"; };
+ D6E7B47811B36D42005CAA34 /* SBJsonWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJsonWriter.h; sourceTree = "<group>"; };
+ D6E7B47911B36D42005CAA34 /* SBJsonWriter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SBJsonWriter.m; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ D2AAC07C0554694100DB518D /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ AACBBE4A0F95108600F1A2B1 /* Foundation.framework in Frameworks */,
+ D629938011AB2DF300CE0FB0 /* UIKit.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 034768DFFF38A50411DB9C8B /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ D2AAC07E0554694100DB518D /* libFrank.a */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 0867D691FE84028FC02AAC07 /* Frank */ = {
+ isa = PBXGroup;
+ children = (
+ D6782D8511BC423900FD0CE1 /* frank_static_resources.bundle */,
+ D62AEFA911B4897B00B824F3 /* cucumber */,
+ D629926711AB2CF700CE0FB0 /* 3rd Party */,
+ 08FB77AEFE84172EC02AAC07 /* src */,
+ 32C88DFF0371C24200C91783 /* Other Sources */,
+ 0867D69AFE84028FC02AAC07 /* Frameworks */,
+ 034768DFFF38A50411DB9C8B /* Products */,
+ );
+ name = Frank;
+ sourceTree = "<group>";
+ };
+ 0867D69AFE84028FC02AAC07 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ AACBBE490F95108600F1A2B1 /* Foundation.framework */,
+ D629937F11AB2DF300CE0FB0 /* UIKit.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+ 08FB77AEFE84172EC02AAC07 /* src */ = {
+ isa = PBXGroup;
+ children = (
+ D6D79B5B11D7FB8B003E0E60 /* Operation.h */,
+ D6D79B5C11D7FB8B003E0E60 /* Operation.m */,
+ D6D05CA111C883AA0081C5A5 /* DumpCommand.h */,
+ D6D05CA211C883AA0081C5A5 /* DumpCommand.m */,
+ D6D05CA311C883AA0081C5A5 /* FrankCommandRoute.h */,
+ D6D05CA411C883AA0081C5A5 /* FrankCommandRoute.m */,
+ D6D05CA511C883AA0081C5A5 /* FrankServer.h */,
+ D6D05CA611C883AA0081C5A5 /* FrankServer.m */,
+ D6D05CA711C883AA0081C5A5 /* MapOperationCommand.h */,
+ D6D05CA811C883AA0081C5A5 /* MapOperationCommand.m */,
+ D6D05CA911C883AA0081C5A5 /* MemoryLogger.h */,
+ D6D05CAA11C883AA0081C5A5 /* MemoryLogger.m */,
+ D6D05CAB11C883AA0081C5A5 /* RequestRouter.h */,
+ D6D05CAC11C883AA0081C5A5 /* RequestRouter.m */,
+ D6D05CAD11C883AA0081C5A5 /* RoutingHTTPConnection.h */,
+ D6D05CAE11C883AA0081C5A5 /* RoutingHTTPConnection.m */,
+ D6D05CAF11C883AA0081C5A5 /* StaticResourcesRoute.h */,
+ D6D05CB011C883AA0081C5A5 /* StaticResourcesRoute.m */,
+ D6D05CB111C883AA0081C5A5 /* UISpecCommandReceiver.h */,
+ D6D05CB211C883AA0081C5A5 /* UISpecCommandReceiver.m */,
+ );
+ name = src;
+ sourceTree = "<group>";
+ };
+ 32C88DFF0371C24200C91783 /* Other Sources */ = {
+ isa = PBXGroup;
+ children = (
+ AA747D9E0F9514B9006C5449 /* Frank_Prefix.pch */,
+ );
+ name = "Other Sources";
+ sourceTree = "<group>";
+ };
+ D629926711AB2CF700CE0FB0 /* 3rd Party */ = {
+ isa = PBXGroup;
+ children = (
+ D6E7B46C11B36D42005CAA34 /* JSON */,
+ D62992AB11AB2DDD00CE0FB0 /* uispec */,
+ D629926811AB2D0500CE0FB0 /* cocoahttpserver */,
+ );
+ name = "3rd Party";
+ sourceTree = "<group>";
+ };
+ D629926811AB2D0500CE0FB0 /* cocoahttpserver */ = {
+ isa = PBXGroup;
+ children = (
+ D629927111AB2D4C00CE0FB0 /* DDData.h */,
+ D629927211AB2D4C00CE0FB0 /* DDData.m */,
+ D629927311AB2D4C00CE0FB0 /* DDNumber.h */,
+ D629927411AB2D4C00CE0FB0 /* DDNumber.m */,
+ D629927511AB2D4C00CE0FB0 /* DDRange.h */,
+ D629927611AB2D4C00CE0FB0 /* DDRange.m */,
+ D629927711AB2D4C00CE0FB0 /* HTTPAuthenticationRequest.h */,
+ D629927811AB2D4C00CE0FB0 /* HTTPAuthenticationRequest.m */,
+ D629927911AB2D4C00CE0FB0 /* HTTPConnection.h */,
+ D629927A11AB2D4C00CE0FB0 /* HTTPConnection.m */,
+ D629927B11AB2D4C00CE0FB0 /* HTTPResponse.h */,
+ D629927C11AB2D4C00CE0FB0 /* HTTPResponse.m */,
+ D629927D11AB2D4C00CE0FB0 /* HTTPServer.h */,
+ D629927E11AB2D4C00CE0FB0 /* HTTPServer.m */,
+ D629927F11AB2D4C00CE0FB0 /* MyHTTPConnection.h */,
+ D629928011AB2D4C00CE0FB0 /* MyHTTPConnection.m */,
+ D629926911AB2D1F00CE0FB0 /* AsyncSocket.h */,
+ D629926A11AB2D1F00CE0FB0 /* AsyncSocket.m */,
+ );
+ name = cocoahttpserver;
+ sourceTree = "<group>";
+ };
+ D62992AB11AB2DDD00CE0FB0 /* uispec */ = {
+ isa = PBXGroup;
+ children = (
+ D62992AC11AB2DDD00CE0FB0 /* components */,
+ D62992B911AB2DDD00CE0FB0 /* dsl */,
+ D62992D911AB2DDD00CE0FB0 /* UISpec.bundle */,
+ D62992DA11AB2DDD00CE0FB0 /* UISpec.h */,
+ D62992DB11AB2DDD00CE0FB0 /* UISpec.m */,
+ D62992DC11AB2DDD00CE0FB0 /* utils */,
+ );
+ name = uispec;
+ path = lib/uispec;
+ sourceTree = "<group>";
+ };
+ D62992AC11AB2DDD00CE0FB0 /* components */ = {
+ isa = PBXGroup;
+ children = (
+ D62992AD11AB2DDD00CE0FB0 /* UIQuerySearchBar.h */,
+ D62992AE11AB2DDD00CE0FB0 /* UIQuerySearchBar.m */,
+ D62992AF11AB2DDD00CE0FB0 /* UIQuerySegmentedControl.h */,
+ D62992B011AB2DDD00CE0FB0 /* UIQuerySegmentedControl.m */,
+ D62992B111AB2DDD00CE0FB0 /* UIQueryTabBar.h */,
+ D62992B211AB2DDD00CE0FB0 /* UIQueryTabBar.m */,
+ D62992B311AB2DDD00CE0FB0 /* UIQueryTableView.h */,
+ D62992B411AB2DDD00CE0FB0 /* UIQueryTableView.m */,
+ D62992B511AB2DDD00CE0FB0 /* UIQueryTableViewCell.h */,
+ D62992B611AB2DDD00CE0FB0 /* UIQueryTableViewCell.m */,
+ D62992B711AB2DDD00CE0FB0 /* UIQueryWebView.h */,
+ D62992B811AB2DDD00CE0FB0 /* UIQueryWebView.m */,
+ );
+ path = components;
+ sourceTree = "<group>";
+ };
+ D62992B911AB2DDD00CE0FB0 /* dsl */ = {
+ isa = PBXGroup;
+ children = (
+ D62992BA11AB2DDD00CE0FB0 /* Recordable.h */,
+ D62992BB11AB2DDD00CE0FB0 /* Recordable.m */,
+ D62992BC11AB2DDD00CE0FB0 /* UIChildren.h */,
+ D62992BD11AB2DDD00CE0FB0 /* UIChildren.m */,
+ D62992BE11AB2DDD00CE0FB0 /* UIConsoleLog.h */,
+ D62992BF11AB2DDD00CE0FB0 /* UIConsoleLog.m */,
+ D62992C011AB2DDD00CE0FB0 /* UIDescendants.h */,
+ D62992C111AB2DDD00CE0FB0 /* UIDescendants.m */,
+ D62992C211AB2DDD00CE0FB0 /* UIExpectation.h */,
+ D62992C311AB2DDD00CE0FB0 /* UIExpectation.m */,
+ D62992C411AB2DDD00CE0FB0 /* UIFilter.h */,
+ D62992C511AB2DDD00CE0FB0 /* UIFilter.m */,
+ D62992C611AB2DDD00CE0FB0 /* UILog.h */,
+ D62992C711AB2DDD00CE0FB0 /* UIMatcher.h */,
+ D62992C811AB2DDD00CE0FB0 /* UIMatcher.m */,
+ D62992C911AB2DDD00CE0FB0 /* UIParents.h */,
+ D62992CA11AB2DDD00CE0FB0 /* UIParents.m */,
+ D62992CB11AB2DDD00CE0FB0 /* UIQuery.h */,
+ D62992CC11AB2DDD00CE0FB0 /* UIQuery.m */,
+ D62992CD11AB2DDD00CE0FB0 /* UIQueryAll.h */,
+ D62992CE11AB2DDD00CE0FB0 /* UIQueryAll.m */,
+ D62992CF11AB2DDD00CE0FB0 /* UIQueryExpectation.h */,
+ D62992D011AB2DDD00CE0FB0 /* UIQueryExpectation.m */,
+ D62992D111AB2DDD00CE0FB0 /* UIRedoer.h */,
+ D62992D211AB2DDD00CE0FB0 /* UIRedoer.m */,
+ D62992D311AB2DDD00CE0FB0 /* UISwizzle.h */,
+ D62992D411AB2DDD00CE0FB0 /* UISwizzle.m */,
+ D62992D511AB2DDD00CE0FB0 /* UITraversal.h */,
+ D62992D611AB2DDD00CE0FB0 /* UITraversal.m */,
+ D62992D711AB2DDD00CE0FB0 /* ViewFilterSwizzler.h */,
+ D62992D811AB2DDD00CE0FB0 /* ViewFilterSwizzler.m */,
+ );
+ path = dsl;
+ sourceTree = "<group>";
+ };
+ D62992DC11AB2DDD00CE0FB0 /* utils */ = {
+ isa = PBXGroup;
+ children = (
+ D62992DD11AB2DDD00CE0FB0 /* CallCache.h */,
+ D62992DE11AB2DDD00CE0FB0 /* CallCache.m */,
+ D62992DF11AB2DDD00CE0FB0 /* NSNumberCreator.h */,
+ D62992E011AB2DDD00CE0FB0 /* NSNumberCreator.m */,
+ D62992E111AB2DDD00CE0FB0 /* ReturnCacher.h */,
+ D62992E211AB2DDD00CE0FB0 /* ReturnCacher.m */,
+ D62992E311AB2DDD00CE0FB0 /* UIBug.h */,
+ D62992E411AB2DDD00CE0FB0 /* UIBug.m */,
+ D62992E511AB2DDD00CE0FB0 /* UIConsole.h */,
+ D62992E611AB2DDD00CE0FB0 /* UIConsole.m */,
+ D62992E711AB2DDD00CE0FB0 /* UIInspector.h */,
+ D62992E811AB2DDD00CE0FB0 /* UIInspector.m */,
+ D62992E911AB2DDD00CE0FB0 /* UIProxy.h */,
+ D62992EA11AB2DDD00CE0FB0 /* UIProxy.m */,
+ D62992EB11AB2DDD00CE0FB0 /* WaitUntilIdle.h */,
+ D62992EC11AB2DDD00CE0FB0 /* WaitUntilIdle.m */,
+ );
+ path = utils;
+ sourceTree = "<group>";
+ };
+ D62AEFA911B4897B00B824F3 /* cucumber */ = {
+ isa = PBXGroup;
+ children = (
+ D62AEFAA11B4897B00B824F3 /* env.rb */,
+ D62AEFAB11B4897B00B824F3 /* frank_helper.rb */,
+ );
+ path = cucumber;
+ sourceTree = "<group>";
+ };
+ D6E7B46C11B36D42005CAA34 /* JSON */ = {
+ isa = PBXGroup;
+ children = (
+ D6E7B46D11B36D42005CAA34 /* JSON.h */,
+ D6E7B46E11B36D42005CAA34 /* NSObject+SBJSON.h */,
+ D6E7B46F11B36D42005CAA34 /* NSObject+SBJSON.m */,
+ D6E7B47011B36D42005CAA34 /* NSString+SBJSON.h */,
+ D6E7B47111B36D42005CAA34 /* NSString+SBJSON.m */,
+ D6E7B47211B36D42005CAA34 /* SBJSON.h */,
+ D6E7B47311B36D42005CAA34 /* SBJSON.m */,
+ D6E7B47411B36D42005CAA34 /* SBJsonBase.h */,
+ D6E7B47511B36D42005CAA34 /* SBJsonBase.m */,
+ D6E7B47611B36D42005CAA34 /* SBJsonParser.h */,
+ D6E7B47711B36D42005CAA34 /* SBJsonParser.m */,
+ D6E7B47811B36D42005CAA34 /* SBJsonWriter.h */,
+ D6E7B47911B36D42005CAA34 /* SBJsonWriter.m */,
+ );
+ name = JSON;
+ path = lib/JSON;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ D2AAC07A0554694100DB518D /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ AA747D9F0F9514B9006C5449 /* Frank_Prefix.pch in Headers */,
+ D629926B11AB2D1F00CE0FB0 /* AsyncSocket.h in Headers */,
+ D629928111AB2D4C00CE0FB0 /* DDData.h in Headers */,
+ D629928311AB2D4C00CE0FB0 /* DDNumber.h in Headers */,
+ D629928511AB2D4C00CE0FB0 /* DDRange.h in Headers */,
+ D629928711AB2D4C00CE0FB0 /* HTTPAuthenticationRequest.h in Headers */,
+ D629928911AB2D4C00CE0FB0 /* HTTPConnection.h in Headers */,
+ D629928B11AB2D4C00CE0FB0 /* HTTPResponse.h in Headers */,
+ D629928D11AB2D4C00CE0FB0 /* HTTPServer.h in Headers */,
+ D629928F11AB2D4C00CE0FB0 /* MyHTTPConnection.h in Headers */,
+ D62992ED11AB2DDD00CE0FB0 /* UIQuerySearchBar.h in Headers */,
+ D62992EF11AB2DDD00CE0FB0 /* UIQuerySegmentedControl.h in Headers */,
+ D62992F111AB2DDD00CE0FB0 /* UIQueryTabBar.h in Headers */,
+ D62992F311AB2DDD00CE0FB0 /* UIQueryTableView.h in Headers */,
+ D62992F511AB2DDD00CE0FB0 /* UIQueryTableViewCell.h in Headers */,
+ D62992F711AB2DDD00CE0FB0 /* UIQueryWebView.h in Headers */,
+ D62992F911AB2DDD00CE0FB0 /* Recordable.h in Headers */,
+ D62992FB11AB2DDD00CE0FB0 /* UIChildren.h in Headers */,
+ D62992FD11AB2DDD00CE0FB0 /* UIConsoleLog.h in Headers */,
+ D62992FF11AB2DDD00CE0FB0 /* UIDescendants.h in Headers */,
+ D629930111AB2DDD00CE0FB0 /* UIExpectation.h in Headers */,
+ D629930311AB2DDD00CE0FB0 /* UIFilter.h in Headers */,
+ D629930511AB2DDD00CE0FB0 /* UILog.h in Headers */,
+ D629930611AB2DDD00CE0FB0 /* UIMatcher.h in Headers */,
+ D629930811AB2DDD00CE0FB0 /* UIParents.h in Headers */,
+ D629930A11AB2DDD00CE0FB0 /* UIQuery.h in Headers */,
+ D629930C11AB2DDD00CE0FB0 /* UIQueryAll.h in Headers */,
+ D629930E11AB2DDD00CE0FB0 /* UIQueryExpectation.h in Headers */,
+ D629931011AB2DDD00CE0FB0 /* UIRedoer.h in Headers */,
+ D629931211AB2DDD00CE0FB0 /* UISwizzle.h in Headers */,
+ D629931411AB2DDD00CE0FB0 /* UITraversal.h in Headers */,
+ D629931611AB2DDD00CE0FB0 /* ViewFilterSwizzler.h in Headers */,
+ D629931811AB2DDD00CE0FB0 /* UISpec.h in Headers */,
+ D629931A11AB2DDD00CE0FB0 /* CallCache.h in Headers */,
+ D629931C11AB2DDD00CE0FB0 /* NSNumberCreator.h in Headers */,
+ D629931E11AB2DDD00CE0FB0 /* ReturnCacher.h in Headers */,
+ D629932011AB2DDD00CE0FB0 /* UIBug.h in Headers */,
+ D629932211AB2DDD00CE0FB0 /* UIConsole.h in Headers */,
+ D629932411AB2DDD00CE0FB0 /* UIInspector.h in Headers */,
+ D629932611AB2DDD00CE0FB0 /* UIProxy.h in Headers */,
+ D629932811AB2DDD00CE0FB0 /* WaitUntilIdle.h in Headers */,
+ D6E7B47A11B36D42005CAA34 /* JSON.h in Headers */,
+ D6E7B47B11B36D42005CAA34 /* NSObject+SBJSON.h in Headers */,
+ D6E7B47D11B36D42005CAA34 /* NSString+SBJSON.h in Headers */,
+ D6E7B47F11B36D42005CAA34 /* SBJSON.h in Headers */,
+ D6E7B48111B36D42005CAA34 /* SBJsonBase.h in Headers */,
+ D6E7B48311B36D42005CAA34 /* SBJsonParser.h in Headers */,
+ D6E7B48511B36D42005CAA34 /* SBJsonWriter.h in Headers */,
+ D6D05CB311C883AA0081C5A5 /* DumpCommand.h in Headers */,
+ D6D05CB511C883AA0081C5A5 /* FrankCommandRoute.h in Headers */,
+ D6D05CB711C883AA0081C5A5 /* FrankServer.h in Headers */,
+ D6D05CB911C883AA0081C5A5 /* MapOperationCommand.h in Headers */,
+ D6D05CBB11C883AA0081C5A5 /* MemoryLogger.h in Headers */,
+ D6D05CBD11C883AA0081C5A5 /* RequestRouter.h in Headers */,
+ D6D05CBF11C883AA0081C5A5 /* RoutingHTTPConnection.h in Headers */,
+ D6D05CC111C883AA0081C5A5 /* StaticResourcesRoute.h in Headers */,
+ D6D05CC311C883AA0081C5A5 /* UISpecCommandReceiver.h in Headers */,
+ D6D79B5D11D7FB8B003E0E60 /* Operation.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ D2AAC07D0554694100DB518D /* Frank */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1DEB921E08733DC00010E9CD /* Build configuration list for PBXNativeTarget "Frank" */;
+ buildPhases = (
+ D2AAC07A0554694100DB518D /* Headers */,
+ D2AAC07B0554694100DB518D /* Sources */,
+ D2AAC07C0554694100DB518D /* Frameworks */,
+ D6782DD711BC67FE00FD0CE1 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Frank;
+ productName = Frank;
+ productReference = D2AAC07E0554694100DB518D /* libFrank.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 0867D690FE84028FC02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "Frank" */;
+ compatibilityVersion = "Xcode 3.1";
+ hasScannedForEncodings = 1;
+ mainGroup = 0867D691FE84028FC02AAC07 /* Frank */;
+ productRefGroup = 034768DFFF38A50411DB9C8B /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ D2AAC07D0554694100DB518D /* Frank */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ D6782DD711BC67FE00FD0CE1 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ D2AAC07B0554694100DB518D /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D629926C11AB2D1F00CE0FB0 /* AsyncSocket.m in Sources */,
+ D629928211AB2D4C00CE0FB0 /* DDData.m in Sources */,
+ D629928411AB2D4C00CE0FB0 /* DDNumber.m in Sources */,
+ D629928611AB2D4C00CE0FB0 /* DDRange.m in Sources */,
+ D629928811AB2D4C00CE0FB0 /* HTTPAuthenticationRequest.m in Sources */,
+ D629928A11AB2D4C00CE0FB0 /* HTTPConnection.m in Sources */,
+ D629928C11AB2D4C00CE0FB0 /* HTTPResponse.m in Sources */,
+ D629928E11AB2D4C00CE0FB0 /* HTTPServer.m in Sources */,
+ D629929011AB2D4C00CE0FB0 /* MyHTTPConnection.m in Sources */,
+ D62992EE11AB2DDD00CE0FB0 /* UIQuerySearchBar.m in Sources */,
+ D62992F011AB2DDD00CE0FB0 /* UIQuerySegmentedControl.m in Sources */,
+ D62992F211AB2DDD00CE0FB0 /* UIQueryTabBar.m in Sources */,
+ D62992F411AB2DDD00CE0FB0 /* UIQueryTableView.m in Sources */,
+ D62992F611AB2DDD00CE0FB0 /* UIQueryTableViewCell.m in Sources */,
+ D62992F811AB2DDD00CE0FB0 /* UIQueryWebView.m in Sources */,
+ D62992FA11AB2DDD00CE0FB0 /* Recordable.m in Sources */,
+ D62992FC11AB2DDD00CE0FB0 /* UIChildren.m in Sources */,
+ D62992FE11AB2DDD00CE0FB0 /* UIConsoleLog.m in Sources */,
+ D629930011AB2DDD00CE0FB0 /* UIDescendants.m in Sources */,
+ D629930211AB2DDD00CE0FB0 /* UIExpectation.m in Sources */,
+ D629930411AB2DDD00CE0FB0 /* UIFilter.m in Sources */,
+ D629930711AB2DDD00CE0FB0 /* UIMatcher.m in Sources */,
+ D629930911AB2DDD00CE0FB0 /* UIParents.m in Sources */,
+ D629930B11AB2DDD00CE0FB0 /* UIQuery.m in Sources */,
+ D629930D11AB2DDD00CE0FB0 /* UIQueryAll.m in Sources */,
+ D629930F11AB2DDD00CE0FB0 /* UIQueryExpectation.m in Sources */,
+ D629931111AB2DDD00CE0FB0 /* UIRedoer.m in Sources */,
+ D629931311AB2DDD00CE0FB0 /* UISwizzle.m in Sources */,
+ D629931511AB2DDD00CE0FB0 /* UITraversal.m in Sources */,
+ D629931711AB2DDD00CE0FB0 /* ViewFilterSwizzler.m in Sources */,
+ D629931911AB2DDD00CE0FB0 /* UISpec.m in Sources */,
+ D629931B11AB2DDD00CE0FB0 /* CallCache.m in Sources */,
+ D629931D11AB2DDD00CE0FB0 /* NSNumberCreator.m in Sources */,
+ D629931F11AB2DDD00CE0FB0 /* ReturnCacher.m in Sources */,
+ D629932111AB2DDD00CE0FB0 /* UIBug.m in Sources */,
+ D629932311AB2DDD00CE0FB0 /* UIConsole.m in Sources */,
+ D629932511AB2DDD00CE0FB0 /* UIInspector.m in Sources */,
+ D629932711AB2DDD00CE0FB0 /* UIProxy.m in Sources */,
+ D629932911AB2DDD00CE0FB0 /* WaitUntilIdle.m in Sources */,
+ D6E7B47C11B36D42005CAA34 /* NSObject+SBJSON.m in Sources */,
+ D6E7B47E11B36D42005CAA34 /* NSString+SBJSON.m in Sources */,
+ D6E7B48011B36D42005CAA34 /* SBJSON.m in Sources */,
+ D6E7B48211B36D42005CAA34 /* SBJsonBase.m in Sources */,
+ D6E7B48411B36D42005CAA34 /* SBJsonParser.m in Sources */,
+ D6E7B48611B36D42005CAA34 /* SBJsonWriter.m in Sources */,
+ D6D05CB411C883AA0081C5A5 /* DumpCommand.m in Sources */,
+ D6D05CB611C883AA0081C5A5 /* FrankCommandRoute.m in Sources */,
+ D6D05CB811C883AA0081C5A5 /* FrankServer.m in Sources */,
+ D6D05CBA11C883AA0081C5A5 /* MapOperationCommand.m in Sources */,
+ D6D05CBC11C883AA0081C5A5 /* MemoryLogger.m in Sources */,
+ D6D05CBE11C883AA0081C5A5 /* RequestRouter.m in Sources */,
+ D6D05CC011C883AA0081C5A5 /* RoutingHTTPConnection.m in Sources */,
+ D6D05CC211C883AA0081C5A5 /* StaticResourcesRoute.m in Sources */,
+ D6D05CC411C883AA0081C5A5 /* UISpecCommandReceiver.m in Sources */,
+ D6D79B5E11D7FB8B003E0E60 /* Operation.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 1DEB921F08733DC00010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ COPY_PHASE_STRIP = NO;
+ DSTROOT = /tmp/Frank.dst;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = Frank_Prefix.pch;
+ INSTALL_PATH = /usr/local/lib;
+ PRODUCT_NAME = Frank;
+ };
+ name = Debug;
+ };
+ 1DEB922008733DC00010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ DSTROOT = /tmp/Frank.dst;
+ GCC_MODEL_TUNING = G5;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = Frank_Prefix.pch;
+ INSTALL_PATH = /usr/local/lib;
+ PRODUCT_NAME = Frank;
+ };
+ name = Release;
+ };
+ 1DEB922308733DC00010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ GCC_C_LANGUAGE_STANDARD = c99;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ OTHER_LDFLAGS = "-ObjC";
+ PREBINDING = NO;
+ SDKROOT = iphoneos3.2;
+ };
+ name = Debug;
+ };
+ 1DEB922408733DC00010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ GCC_C_LANGUAGE_STANDARD = c99;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ OTHER_LDFLAGS = "-ObjC";
+ PREBINDING = NO;
+ SDKROOT = iphoneos3.2;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1DEB921E08733DC00010E9CD /* Build configuration list for PBXNativeTarget "Frank" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB921F08733DC00010E9CD /* Debug */,
+ 1DEB922008733DC00010E9CD /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "Frank" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB922308733DC00010E9CD /* Debug */,
+ 1DEB922408733DC00010E9CD /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 0867D690FE84028FC02AAC07 /* Project object */;
+}
17 Frank_Prefix.pch
@@ -0,0 +1,17 @@
+//
+// Prefix header for all source files of the 'CocoaTouchStaticLibrary' target in the 'CocoaTouchStaticLibrary' project.
+//
+
+#ifdef __OBJC__
+ #import <Foundation/Foundation.h>
+ #import <UIKit/UIKit.h>
+#endif
+
+//#define OldLog(...) NSLog(...)
+#ifndef NEW_LOG_DEFINED
+#define NEW_LOG_DEFINED 1
+
+#define NSLog(f,...) LogToMemory(f,##__VA_ARGS__)
+
+extern void LogToMemory(NSString *format, ...);
+#endif
20 README.md
@@ -0,0 +1,20 @@
+About
+-----
+
+Frank is an iPhone/iPad UI testing tool. It combines UISpec with an embedded HTTP server. This means it can be driven externally by cucumber for example.
+
+Architecture
+----
+![Frank Architecture Overview](https://github.com/skizz/frank/raw/master/doc/Frank%20Architecture.png)
+
+Usage
+-----
+
+At this point all you need to do to add Frank to an iPhad app is:
+
+ * create a Frankified target by duplicating your normal target
+ * add the Frank.a static library to that Frankified target
+ * add a -ObjC flag to the linker settings (Other Linker Flags) for the Frankified target (see http://developer.apple.com/mac/library/qa/qa2006/qa1490.html for details)
+ * add a dependency on apple's CFNetwork Framework
+ * add the the static frank bundle to the project somewhere. Frank uses these files to provide the interactive Symbiote web app while your iPhone app is running
+ * add a custom main.m file (a sample of which is included in the Frank repo) which boots the Frank server during iPhone app startup.
9 cucumber/color_helper.rb
@@ -0,0 +1,9 @@
+module ColorHelper
+ def colorize(text, color_code)
+ "\e[#{color_code}m#{text}\e[0m"
+ end
+
+ def red(text); colorize(text, 31); end
+ def green(text); colorize(text, 32); end
+ def blue(text); colorize(text, 34); end
+end
6 cucumber/env.rb
@@ -0,0 +1,6 @@
+require File.join( File.dirname(__FILE__), "frank_helper" )
+
+require 'spec/expectations'
+
+
+World(FrankHelper)
147 cucumber/frank_helper.rb
@@ -0,0 +1,147 @@
+require 'net/http'
+require 'json'
+
+module FrankHelper
+
+ def touch( uiquery )
+ views_touched = frankly_map( uiquery, 'touch' )
+ raise "could not find anything matching [#{uiquery}] to touch" if views_touched.empty?
+ #TODO raise warning if views_touched.count > 1
+ end
+
+ def element_exists( query )
+ matches = frankly_map( query, 'accessibilityLabel' )
+ # TODO: raise warning if matches.count > 1
+ !matches.empty?
+ end
+
+ def check_element_exists( query )
+ puts "checking #{query} exists..."
+ element_exists( query ).should be_true
+ end
+
+ def check_element_does_not_exist( query )
+ puts "checking #{query} does not exist..."
+ element_exists( query ).should be_false
+ end
+
+ def view_with_mark_exists(expected_mark)
+ element_exists( "view marked:'#{expected_mark}'" )
+ end
+
+ def check_view_with_mark_exists(expected_mark)
+ check_element_exists( "view marked:'#{expected_mark}'" )
+ end
+
+ def frankly_map( query, method_name, *method_args )
+ operation_map = {
+ :method_name => method_name,
+ :arguments => method_args
+ }
+ res = post_to_uispec_server( 'map', :query => query, :operation => operation_map )
+ res = JSON.parse( res )
+ if res['outcome'] != 'SUCCESS'
+ raise "frankly_map #{query} #{method_name} failed because: #{res['reason']}\n#{res['details']}"
+ end
+
+ res['results']
+ end
+
+ def frankly_dump
+ res = get_to_uispec_server( 'dump' )
+ puts JSON.pretty_generate(JSON.parse(res)) rescue puts res #dumping a super-deep DOM causes errors
+ end
+
+ #taken from Ian Dee's Encumber
+ def post_to_uispec_server( verb, command_hash )
+ url = frank_url_for( verb )
+ req = Net::HTTP::Post.new url.path
+ req.body = command_hash.to_json
+
+ make_http_request( url, req )
+ end
+
+ def get_to_uispec_server( verb )
+ url = frank_url_for( verb )
+ req = Net::HTTP::Get.new url.path
+ make_http_request( url, req )
+ end
+
+ def frank_url_for( verb )
+ url = URI.parse "http://localhost:37265/"
+ url.path = '/'+verb
+ url
+ end
+
+ def make_http_request( url, req )
+ http = Net::HTTP.new(url.host, url.port)
+
+ res = http.start do |sess|
+ sess.request req
+ end
+
+ res.body
+ end
+
+ def start_recording
+ %x{osascript<<APPLESCRIPT
+ tell application "QuickTime Player"
+ set sr to new screen recording
+ tell sr to start
+ end tell
+ APPLESCRIPT}
+
+ end
+
+ def stop_recording
+ %x{osascript<<APPLESCRIPT
+ tell application "QuickTime Player"
+ set sr to (document 1)
+ tell sr to stop
+ end tell
+ APPLESCRIPT}
+ end
+
+ def launch_app_in_simulator
+ %x{osascript<<APPLESCRIPT
+application "iPhone Simulator" quit
+tell application "Xcode"
+ set myprojectdocument to active project document
+ set myproject to project of myprojectdocument
+ tell myproject
+ launch
+ end tell
+end tell
+application "iPhone Simulator" activate
+ APPLESCRIPT}
+ sleep 5 # TODO: replace this with polling for the frank server
+ end
+
+ #Note this needs to have "Enable access for assistive devices"
+ #chcked in the Universal Access system preferences
+ def simulator_hardware_menu_press( menu_label )
+ %x{osascript<<APPLESCRIPT
+activate application "iPhone Simulator"
+tell application "System Events"
+ click menu item "#{menu_label}" of menu "Hardware" of menu bar of process "iPhone Simulator"
+end tell
+ APPLESCRIPT}
+ end
+
+ def press_home_on_simulator
+ simulator_hardware_menu_press "Home"
+ end
+
+ def rotate_simulator_left
+ simulator_hardware_menu_press "Rotate Left"
+ end
+
+ def rotate_simulator_right
+ simulator_hardware_menu_press "Rotate Right"
+ end
+
+ def shake_simulator
+ simulator_hardware_menu_press "Shake Gesture"
+ end
+
+end
102 cucumber/frankly_steps.rb
@@ -0,0 +1,102 @@
+When /^I type "([^\"]*)" into the "([^\"]*)" text field$/ do |text_to_type, mark|
+ # TODO: extend frankly_map to support sending method arguments
+ text_fields_modified = frankly_map( "textField placeholder:'#{mark}'", "setText:", text_to_type )
+ raise "could not find text fields marked '#{text_to_type}'" if text_fields_modified.empty?
+ #TODO raise warning if text_fields_modified.count > 1
+end
+
+# alias
+When /^I fill in "([^\"]*)" with "([^\"]*)"$/ do |text_field, text_to_type|
+ When %Q|I type "#{text_to_type}" into the "#{text_field}" text field|
+end
+
+When /^I fill in text fields as follows:$/ do |table|
+ table.hashes.each do |row|
+ When %Q|I type "#{row['text']}" into the "#{row['field']}" text field|
+ end
+end
+
+And /^I rotate to the "([^\"]*)"$/ do |direction|
+ if direction == "right"
+ rotate_simulator_right
+ else
+ rotate_simulator_left
+ end
+ sleep 1
+end
+
+Then /^I wait to see "([^\"]*)"$/ do |expected_mark|
+ Timeout::timeout(30) do
+ until view_with_mark_exists( expected_mark )
+ sleep 0.1
+ end
+ end
+end
+
+Then /^I wait to not see "([^\"]*)"$/ do |expected_mark|
+ Timeout::timeout(30) do
+ while element_exists( "view marked:'#{expected_mark}'" )
+ sleep 0.1
+ end
+ end
+end
+
+Then /^I should see "([^\"]*)"$/ do |expected_mark|
+ values = frankly_map( 'view', 'accessibilityLabel' )
+ values.should include(expected_mark)
+end
+
+Then /^I should not see "([^\"]*)"$/ do |expected_mark|
+ values = frankly_map( 'view', 'accessibilityLabel' )
+ values.should_not include(expected_mark)
+end
+
+Then /^I should see the following:$/ do |table|
+ values = frankly_map( 'view', 'accessibilityLabel' )
+ table.raw.each do |expected_mark|
+ values.should include( expected_mark.first )
+ end
+end
+
+
+Then /^I should see a navigation bar titled "([^\"]*)"$/ do |expected_mark|
+ values = frankly_map( 'navigationItemView', 'accessibilityLabel' )
+ values.should include(expected_mark)
+end
+
+When /^I touch "([^\"]*)"$/ do |mark|
+ touch( "view marked:'#{mark}'" )
+end
+
+When /^I touch the button marked "([^\"]*)"$/ do |mark|
+ touch( "button marked:'#{mark}'" )
+end
+
+When /^I touch the "([^\"]*)" action sheet button$/ do |mark|
+ touch( "actionSheet threePartButton marked:'#{mark}'" )
+end
+
+When /^I touch the (\d*)(?:st|nd|rd|th)? action sheet button$/ do |ordinal|
+ ordinal = ordinal.to_i
+ touch( "actionSheet threePartButton tag:#{ordinal}" )
+end
+
+
+When /^I flip switch "([^\"]*)"$/ do |mark|
+ touch("view:'UISwitch' marked:'#{mark}'")
+end
+
+Then /^switch "([^\"]*)" should be (off|on)$/ do |mark,expected_state|
+ switch_states = frankly_map( "view:'UISwitch' marked:'#{mark}'", "isOn" )
+ puts switch_states
+ pending # express the regexp above with the code you wish you had
+end
+
+
+Then /^I navigate back$/ do
+ touch( "navigationItemButtonView" )
+end
+
+When /^I dump the DOM$/ do
+ dom = frankly_dump
+end
6 cucumber/recordable.rb
@@ -0,0 +1,6 @@
+Around('@record_movie') do |scenario, block|
+ start_recording
+ block.call
+ stop_recording
+end
+
BIN  doc/Frank Architecture.graffle/QuickLook/Preview.pdf
Binary file not shown
BIN  doc/Frank Architecture.graffle/QuickLook/Thumbnail.tiff
Binary file not shown
1,344 doc/Frank Architecture.graffle/data.plist
@@ -0,0 +1,1344 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>ActiveLayerIndex</key>
+ <integer>0</integer>
+ <key>ApplicationVersion</key>
+ <array>
+ <string>com.omnigroup.OmniGraffle</string>
+ <string>138.3.0.112617</string>
+ </array>
+ <key>AutoAdjust</key>
+ <true/>
+ <key>BackgroundGraphic</key>
+ <dict>
+ <key>Bounds</key>
+ <string>{{0, 0}, {756, 553}}</string>
+ <key>Class</key>
+ <string>SolidGraphic</string>
+ <key>ID</key>
+ <integer>2</integer>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ </dict>
+ <key>CanvasOrigin</key>
+ <string>{0, 0}</string>
+ <key>ColumnAlign</key>
+ <integer>1</integer>
+ <key>ColumnSpacing</key>
+ <real>36</real>
+ <key>CreationDate</key>
+ <string>2010-05-29 14:50:11 -0700</string>
+ <key>Creator</key>
+ <string>Pete Hodgson</string>
+ <key>DisplayScale</key>
+ <string>1 0/72 in = 1 0/72 in</string>
+ <key>ExportShapes</key>
+ <array>
+ <dict>
+ <key>InspectorGroup</key>
+ <real>255</real>
+ <key>ShapeImageRect</key>
+ <string>{{2, 2}, {22, 22}}</string>
+ <key>ShapeName</key>
+ <string>CD13FC64-C596-11DA-BEB1-000A95D764F6-3187-00000A0CA5790A65</string>
+ <key>ShouldExport</key>
+ <string>YES</string>
+ <key>StrokePath</key>
+ <dict>
+ <key>elements</key>
+ <array>
+ <dict>
+ <key>element</key>
+ <string>MOVETO</string>
+ <key>point</key>
+ <string>{0, -0.5}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{0.473451, -0.5}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{0.488114, -0.5}</string>
+ <key>control2</key>
+ <string>{0.5, -0.48779}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{0.5, -0.472727}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{0.5, 0.318179}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{0.5, 0.333241}</string>
+ <key>control2</key>
+ <string>{0.488114, 0.345451}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{0.473451, 0.345451}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{-0.473451, 0.345451}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{-0.488114, 0.345451}</string>
+ <key>control2</key>
+ <string>{-0.5, 0.333241}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{-0.5, 0.318179}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{-0.5, -0.472727}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{-0.5, -0.48779}</string>
+ <key>control2</key>
+ <string>{-0.488114, -0.5}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{-0.473451, -0.5}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{-0.473451, -0.5}</string>
+ <key>control2</key>
+ <string>{-0.473451, -0.5}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{-0.473451, -0.5}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>CLOSE</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>MOVETO</string>
+ <key>point</key>
+ <string>{-0.110618, 0.354542}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{0.12832, 0.354544}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{0.14602, 0.454544}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{0.199116, 0.481818}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{0.199116, 0.5}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{-0.181416, 0.499998}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{-0.181416, 0.481816}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{-0.128319, 0.454542}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>CLOSE</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>MOVETO</string>
+ <key>point</key>
+ <string>{-0.446903, -0.445455}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{-0.446903, 0.127273}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{0.446903, 0.127273}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{0.446903, -0.445455}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>CLOSE</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>MOVETO</string>
+ <key>point</key>
+ <string>{0.0475665, 0.20961}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{0.0420699, 0.202543}</string>
+ <key>control2</key>
+ <string>{0.0348105, 0.199005}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{0.0257969, 0.199005}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{0.0219942, 0.199005}</string>
+ <key>control2</key>
+ <string>{0.0185202, 0.199605}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{0.0153787, 0.200803}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{0.0134083, 0.201567}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{0.0107682, 0.202659}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{0.00903964, 0.203351}</string>
+ <key>control2</key>
+ <string>{0.00746679, 0.203693}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{0.00604951, 0.203693}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{0.00494325, 0.203693}</string>
+ <key>control2</key>
+ <string>{0.00349152, 0.203298}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{0.00169384, 0.202508}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{-0.000328302, 0.201647}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{-0.00224686, 0.200839}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{-0.00504708, 0.199614}</string>
+ <key>control2</key>
+ <string>{-0.00805008, 0.199005}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{-0.0112606, 0.199005}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{-0.0198684, 0.199005}</string>
+ <key>control2</key>
+ <string>{-0.026782, 0.201988}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{-0.0319974, 0.20795}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{-0.0372131, 0.213916}</string>
+ <key>control2</key>
+ <string>{-0.0398231, 0.221781}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{-0.0398231, 0.231547}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{-0.0398231, 0.245286}</string>
+ <key>control2</key>
+ <string>{-0.0356445, 0.257977}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{-0.0272833, 0.269624}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{-0.0214844, 0.277756}</string>
+ <key>control2</key>
+ <string>{-0.0161781, 0.281818}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{-0.0113775, 0.281818}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{-0.00934207, 0.281818}</string>
+ <key>control2</key>
+ <string>{-0.00731993, 0.281414}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{-0.00531495, 0.280602}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{-0.00277412, 0.279546}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{-0.000756264, 0.278804}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{0.00207412, 0.277783}</string>
+ <key>control2</key>
+ <string>{0.00468397, 0.277273}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{0.00706923, 0.277273}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{0.00958848, 0.277273}</string>
+ <key>control2</key>
+ <string>{0.0124879, 0.277925}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{0.015772, 0.27923}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{0.0173794, 0.279861}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{0.0207238, 0.281166}</string>
+ <key>control2</key>
+ <string>{0.0233684, 0.281818}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{0.0253042, 0.281818}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{0.029418, 0.281818}</string>
+ <key>control2</key>
+ <string>{0.0339636, 0.278924}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{0.0389328, 0.273131}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{0.0439022, 0.267343}</string>
+ <key>control2</key>
+ <string>{0.0477046, 0.260538}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{0.0503318, 0.252721}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{0.0405577, 0.247536}</string>
+ <key>control2</key>
+ <string>{0.0356747, 0.240092}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{0.0356747, 0.230393}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{0.0356747, 0.222296}</string>
+ <key>control2</key>
+ <string>{0.0396328, 0.215367}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{0.0475665, 0.20961}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>MOVETO</string>
+ <key>point</key>
+ <string>{0.0262548, 0.174307}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>LINETO</string>
+ <key>point</key>
+ <string>{0.0262548, 0.174307}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{0.0254945, 0.174414}</string>
+ <key>control2</key>
+ <string>{0.024924, 0.174503}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{0.0245436, 0.174574}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{0.0192202, 0.175359}</string>
+ <key>control2</key>
+ <string>{0.014536, 0.178054}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{0.0104915, 0.182657}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{0.0064472, 0.18726}</string>
+ <key>control2</key>
+ <string>{0.00442493, 0.192183}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{0.00442493, 0.19743}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{0.00442493, 0.198033}</string>
+ <key>control2</key>
+ <string>{0.00451112, 0.199037}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{0.00468397, 0.200426}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{0.0104569, 0.200426}</string>
+ <key>control2</key>
+ <string>{0.0155213, 0.198095}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{0.019877, 0.193444}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{0.0242325, 0.188783}</string>
+ <key>control2</key>
+ <string>{0.0264103, 0.183372}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{0.0264103, 0.177197}</string>
+ </dict>
+ <dict>
+ <key>control1</key>
+ <string>{0.0264103, 0.176517}</string>
+ <key>control2</key>
+ <string>{0.0263585, 0.175555}</string>
+ <key>element</key>
+ <string>CURVETO</string>
+ <key>point</key>
+ <string>{0.0262548, 0.174307}</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>CLOSE</string>
+ </dict>
+ <dict>
+ <key>element</key>
+ <string>MOVETO</string>
+ <key>point</key>
+ <string>{0.0262548, 0.174307}</string>
+ </dict>
+ </array>
+ </dict>
+ <key>TextBounds</key>
+ <string>{{0, 0}, {1, 1}}</string>
+ </dict>
+ </array>
+ <key>GraphDocumentVersion</key>
+ <integer>6</integer>
+ <key>GraphicsList</key>
+ <array>
+ <dict>
+ <key>Bounds</key>
+ <string>{{159.401, 166.294}, {62, 44}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>1</string>
+ <key>r</key>
+ <string>1</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica-Bold</string>
+ <key>Size</key>
+ <real>18</real>
+ </dict>
+ <key>ID</key>
+ <integer>15327</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Pad</key>
+ <integer>0</integer>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\b\fs36 \cf2 Test\
+Scripts}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>Group</string>
+ <key>Graphics</key>
+ <array>
+ <dict>
+ <key>Bounds</key>
+ <string>{{250.174, 152.052}, {20.3187, 7.6532}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>HFlip</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>15324</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.8</string>
+ <key>r</key>
+ <string>0.4</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{250.174, 136.108}, {20.3187, 7.6532}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>HFlip</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>15325</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.8</string>
+ <key>r</key>
+ <string>0.4</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{191.25, 127.817}, {67.0518, 40.1793}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>HFlip</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>15326</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.8</string>
+ <key>r</key>
+ <string>0.4</string>
+ </dict>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 Frank Driver}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ </array>
+ <key>HFlip</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>15323</integer>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{97.87, 122.297}, {185.062, 131.993}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>31</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 0.5}</string>
+ <string>{1, -0.5}</string>
+ <string>{-1, 0.5}</string>
+ <string>{-1, -0.5}</string>
+ <string>{0.5, 1}</string>
+ <string>{-0.5, 1}</string>
+ <string>{0.5, -1}</string>
+ <string>{-0.5, -1}</string>
+ </array>
+ <key>Shape</key>
+ <string>RoundedStack</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.501961</string>
+ <key>g</key>
+ <string>0.25098</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{382.297, 108}, {79.243, 42}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>Vertical</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>15318</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Pad</key>
+ <integer>0</integer>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 automation commands (via HTTP)}</string>
+ <key>VerticalPad</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{291.182, 141.477}, {217.09, 53.9093}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>1</integer>
+ <key>Rotation</key>
+ <real>8.7802238464355469</real>
+ <key>Shape</key>
+ <string>AdjustableDoubleArrow</string>
+ <key>ShapeData</key>
+ <dict>
+ <key>ratio</key>
+ <real>0.50724875926971436</real>
+ <key>width</key>
+ <real>20.053150177001953</real>
+ </dict>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.650309</string>
+ <key>r</key>
+ <string>0.727291</string>
+ </dict>
+ <key>GradientColor</key>
+ <dict>
+ <key>b</key>
+ <string>0.727062</string>
+ <key>g</key>
+ <string>0.290394</string>
+ <key>r</key>
+ <string>0.384375</string>
+ </dict>
+ <key>MiddleFraction</key>
+ <real>0.4523809552192688</real>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.4</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>ShadowVector</key>
+ <string>{0, 2}</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.139422</string>
+ <key>r</key>
+ <string>0.308186</string>
+ </dict>
+ </dict>
+ </dict>
+ <key>TextRelativeArea</key>
+ <string>{{0.125, 0.25}, {0.75, 0.5}}</string>
+ <key>isConnectedShape</key>
+ <true/>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>Group</string>
+ <key>Graphics</key>
+ <array>
+ <dict>
+ <key>Bounds</key>
+ <string>{{529, 190.149}, {20.3187, 7.6532}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>23</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>