├── .gitignore ├── .gitmodules ├── Documentation.mdown ├── Info.plist ├── LICENSE ├── OnePassword.xcodeproj ├── alcor.mode1 ├── alcor.pbxuser ├── patrick.mode1v3 ├── patrick.pbxuser ├── project.pbxproj └── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcuserdata │ └── patrick.xcuserdatad │ └── WorkspaceSettings.xcsettings ├── OnePasswordAction.h ├── OnePasswordAction.m ├── OnePasswordDefines.h ├── OnePasswordSource.h ├── OnePasswordSource.m ├── OnePassword_Prefix.pch ├── README.markdown └── YAJL.framework ├── Headers ├── Resources ├── Versions ├── A │ ├── Headers │ │ ├── NSBundle+YAJL.h │ │ ├── NSObject+YAJL.h │ │ ├── YAJL.h │ │ ├── YAJLDocument.h │ │ ├── YAJLGen.h │ │ ├── YAJLParser.h │ │ ├── yajl_common.h │ │ ├── yajl_gen.h │ │ ├── yajl_parse.h │ │ └── yajl_version.h │ ├── Resources │ │ ├── English.lproj │ │ │ └── InfoPlist.strings │ │ └── Info.plist │ └── YAJL └── Current └── YAJL /.gitignore: -------------------------------------------------------------------------------- 1 | .svn 2 | .DS_Store 3 | ._.* 4 | *.o 5 | build 6 | Makefile 7 | autom4te.cache 8 | *~ 9 | *.pbxuser 10 | *.perspectivev3 11 | *.mode1v3 12 | *.mode2v3 13 | *.pbxuser 14 | *.tm_build_errors 15 | *.tmproj 16 | Developer.xcconfig 17 | *.xcworkspace 18 | *.xcuserdatad 19 | *.xcuserdatad/* -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "JSONKit"] 2 | path = JSONKit 3 | url = git://github.com/johnezang/JSONKit.git 4 | -------------------------------------------------------------------------------- /Documentation.mdown: -------------------------------------------------------------------------------- 1 | ## 1Password Plugin 2 | 3 | This plugin gives you the ability to quickly find 1Password items using Quicksilver. 4 | 5 | With any item from 1Password selected, you can: 6 | 7 | * View the item in 1Password 8 | * Quick Look the item 9 | 10 | ### Login Items 11 | 12 | Login items have some special features. By default, opening a Login item will trigger the “Open & Fill” behavior using the first URL associated with the item. To view the item in 1Password instead, hold the Shift key while opening it. (This behavior is part of 1Password, not Quicksilver.) 13 | 14 | All of the URLs associated with a Login are accesible by selecting the item and hitting or /. Use this feature when you want to Open & Fill one of its other URLs. 15 | 16 | ### Requirements 17 | 18 | For Quicksilver to index items from 1Password, you will need to enable [integration with 3rd party](https://support.1password.com/integration-mac/) apps in the “Advanced” section of 1Password’s preferences. 19 | 20 | ### Catalog 21 | 22 | The 1Password catalog presets allow Quicksilver to index your 1Password items. (Only basic information like title and URL is available. 1Password does not expose sensitive data to 3rd party applications.) 23 | 24 | Go to Preferences → [Catalog](qs://preferences#QSCatalogPrefPane) → Plugins and look for the 1Password group. By expanding this group, you can select which categories from 1Password you would like indexed by Quicksilver. 25 | 26 | You can access all these items by right arrowing (→) into the 1Password application in Quicksilver’s first pane. 27 | 28 | ### Actions 29 | 30 | Open & Fill 31 | : The Open & Fill action is available for individual website URLs associated with Login items. When run, 1Password opens the URL in your browser and fills the login form. 32 | 33 | ----- 34 | 35 | This plugin has taken a lot of development time. If you enjoy using it, please consider [donating](http://patjack.co.uk/donating-for-my-quicksilver-1password-plugin/). 36 | -------------------------------------------------------------------------------- /Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleDisplayName 8 | 1Password Plugin 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | com.robertson.Quicksilver.OnePassword 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | 1Password Plugin 17 | CFBundlePackageType 18 | BNDL 19 | CFBundleShortVersionString 20 | 4.2.0 21 | CFBundleVersion 22 | 3B6 23 | QSActions 24 | 25 | openAndFill 26 | 27 | actionClass 28 | OnePasswordAction 29 | actionSelector 30 | openAndFill: 31 | directTypes 32 | 33 | QS1PasswordURLType 34 | 35 | name 36 | Open & Fill 37 | precedence 38 | 4 39 | 40 | 41 | QSDefaults 42 | 43 | QS1PasswordKeychainPath 44 | ~/Library/Application Support/1Password 4/3rd Party Integration/bookmarks-default.json 45 | 46 | QSPlugIn 47 | 48 | author 49 | Patrick Robertson 50 | categories 51 | 52 | Applications 53 | 54 | description 55 | Quickly find and use 1Password items 56 | extendedDescription 57 | <h2>1Password Plugin</h2> 58 | <p>This plugin gives you the ability to quickly find 1Password items using Quicksilver.</p> 59 | <p>With any item from 1Password selected, you can:</p> 60 | <ul> 61 | <li>View the item in 1Password</li> 62 | <li>Quick Look the item</li> 63 | </ul> 64 | <h3>Login Items</h3> 65 | <p>Login items have some special features. By default, opening a Login item will trigger the “Open &amp; Fill” behavior using the first URL associated with the item. To view the item in 1Password instead, hold the Shift key while opening it. (This behavior is part of 1Password, not Quicksilver.)</p> 66 | <p>All of the URLs associated with a Login are accesible by selecting the item and hitting <kbd>→</kbd> or <kbd>/</kbd>. Use this feature when you want to Open &amp; Fill one of its other URLs.</p> 67 | <h3>Requirements</h3> 68 | <p>For Quicksilver to index items from 1Password, you will need to enable <a href="https://support.1password.com/integration-mac/">integration with 3rd party</a> apps in the “Advanced” section of 1Password’s preferences.</p> 69 | <h3>Catalog</h3> 70 | <p>The 1Password catalog presets allow Quicksilver to index your 1Password items. (Only basic information like title and URL is available. 1Password does not expose sensitive data to 3rd party applications.)</p> 71 | <p>Go to Preferences → <a href="qs://preferences#QSCatalogPrefPane">Catalog</a> → Plugins and look for the 1Password group. By expanding this group, you can select which categories from 1Password you would like indexed by Quicksilver.</p> 72 | <p>You can access all these items by right arrowing (→) into the 1Password application in Quicksilver’s first pane.</p> 73 | <h3>Actions</h3> 74 | <dl> 75 | <dt>Open &amp; Fill</dt> 76 | <dd>The Open &amp; Fill action is available for individual website URLs associated with Login items. When run, 1Password opens the URL in your browser and fills the login form.</dd> 77 | </dl> 78 | <hr> 79 | <p>This plugin has taken a lot of development time. If you enjoy using it, please consider <a href="http://patjack.co.uk/donating-for-my-quicksilver-1password-plugin/">donating</a>.</p> 80 | icon 81 | QS1PasswordIcon 82 | relatedBundles 83 | 84 | com.agilebits.onepassword7 85 | 86 | 87 | QSPresetAdditions 88 | 89 | 90 | ID 91 | QSPreset1PasswordGroup 92 | children 93 | 94 | 95 | ID 96 | QSPreset1PasswordLogins 97 | enabled 98 | 99 | icon 100 | QS1PasswordVaultIcon 101 | name 102 | Logins 103 | settings 104 | 105 | categoryUUID 106 | 001 107 | 108 | source 109 | OnePasswordSource 110 | 111 | 112 | ID 113 | QSPreset1PasswordCreditCards 114 | enabled 115 | 116 | icon 117 | QS1PasswordVaultIcon 118 | name 119 | Credit Cards 120 | settings 121 | 122 | categoryUUID 123 | 002 124 | 125 | source 126 | OnePasswordSource 127 | 128 | 129 | ID 130 | QSPreset1PasswordNotes 131 | enabled 132 | 133 | icon 134 | QS1PasswordVaultIcon 135 | name 136 | Secure Notes 137 | settings 138 | 139 | categoryUUID 140 | 003 141 | 142 | source 143 | OnePasswordSource 144 | 145 | 146 | ID 147 | QSPreset1PasswordIdentities 148 | enabled 149 | 150 | icon 151 | QS1PasswordVaultIcon 152 | name 153 | Identities 154 | settings 155 | 156 | categoryUUID 157 | 004 158 | 159 | source 160 | OnePasswordSource 161 | 162 | 163 | ID 164 | QSPreset1PasswordPasswords 165 | enabled 166 | 167 | icon 168 | QS1PasswordVaultIcon 169 | name 170 | Generated Passwords 171 | settings 172 | 173 | categoryUUID 174 | 005 175 | 176 | source 177 | OnePasswordSource 178 | 179 | 180 | ID 181 | QSPreset1PasswordDocuments 182 | enabled 183 | 184 | icon 185 | QS1PasswordVaultIcon 186 | name 187 | Documents 188 | settings 189 | 190 | categoryUUID 191 | 006 192 | 193 | source 194 | OnePasswordSource 195 | 196 | 197 | ID 198 | QSPreset1PasswordLicenses 199 | enabled 200 | 201 | icon 202 | QS1PasswordVaultIcon 203 | name 204 | Software Licenses 205 | settings 206 | 207 | categoryUUID 208 | 100 209 | 210 | source 211 | OnePasswordSource 212 | 213 | 214 | ID 215 | QSPreset1PasswordBankAccounts 216 | enabled 217 | 218 | icon 219 | QS1PasswordVaultIcon 220 | name 221 | Bank Accounts 222 | settings 223 | 224 | categoryUUID 225 | 101 226 | 227 | source 228 | OnePasswordSource 229 | 230 | 231 | ID 232 | QSPreset1PasswordDatabases 233 | enabled 234 | 235 | icon 236 | QS1PasswordVaultIcon 237 | name 238 | Databases 239 | settings 240 | 241 | categoryUUID 242 | 102 243 | 244 | source 245 | OnePasswordSource 246 | 247 | 248 | ID 249 | QSPreset1PasswordDriverLicenses 250 | enabled 251 | 252 | icon 253 | QS1PasswordVaultIcon 254 | name 255 | Driver Licenses 256 | settings 257 | 258 | categoryUUID 259 | 103 260 | 261 | source 262 | OnePasswordSource 263 | 264 | 265 | ID 266 | QSPreset1PasswordOutdoorLicenses 267 | enabled 268 | 269 | icon 270 | QS1PasswordVaultIcon 271 | name 272 | Outdoor Licenses 273 | settings 274 | 275 | categoryUUID 276 | 104 277 | 278 | source 279 | OnePasswordSource 280 | 281 | 282 | ID 283 | QSPreset1PasswordMemberships 284 | enabled 285 | 286 | icon 287 | QS1PasswordVaultIcon 288 | name 289 | Memberships 290 | settings 291 | 292 | categoryUUID 293 | 105 294 | 295 | source 296 | OnePasswordSource 297 | 298 | 299 | ID 300 | QSPreset1PasswordPassports 301 | enabled 302 | 303 | icon 304 | QS1PasswordVaultIcon 305 | name 306 | Passports 307 | settings 308 | 309 | categoryUUID 310 | 106 311 | 312 | source 313 | OnePasswordSource 314 | 315 | 316 | ID 317 | QSPreset1PasswordRewardPrograms 318 | enabled 319 | 320 | icon 321 | QS1PasswordVaultIcon 322 | name 323 | Reward Programs 324 | settings 325 | 326 | categoryUUID 327 | 107 328 | 329 | source 330 | OnePasswordSource 331 | 332 | 333 | ID 334 | QSPreset1PasswordSSNs 335 | enabled 336 | 337 | icon 338 | QS1PasswordVaultIcon 339 | name 340 | Social Security Numbers 341 | settings 342 | 343 | categoryUUID 344 | 108 345 | 346 | source 347 | OnePasswordSource 348 | 349 | 350 | ID 351 | QSPreset1PasswordWirelessRouters 352 | enabled 353 | 354 | icon 355 | QS1PasswordVaultIcon 356 | name 357 | Wireless Routers 358 | settings 359 | 360 | categoryUUID 361 | 109 362 | 363 | source 364 | OnePasswordSource 365 | 366 | 367 | ID 368 | QSPreset1PasswordServers 369 | enabled 370 | 371 | icon 372 | QS1PasswordVaultIcon 373 | name 374 | Servers 375 | settings 376 | 377 | categoryUUID 378 | 110 379 | 380 | source 381 | OnePasswordSource 382 | 383 | 384 | ID 385 | QSPreset1PasswordEmailAccounts 386 | enabled 387 | 388 | icon 389 | QS1PasswordVaultIcon 390 | name 391 | Email Accounts 392 | settings 393 | 394 | categoryUUID 395 | 111 396 | 397 | source 398 | OnePasswordSource 399 | 400 | 401 | enabled 402 | 403 | icon 404 | QS1PasswordIcon 405 | name 406 | 1Password 407 | source 408 | QSGroupObjectSource 409 | 410 | 411 | QSRegistration 412 | 413 | QSActionProviders 414 | 415 | OnePasswordAction 416 | OnePasswordAction 417 | 418 | QSBundleChildHandlers 419 | 420 | com.agilebits.onepassword7 421 | OnePasswordSource 422 | 423 | QSObjectHandlers 424 | 425 | QS1PasswordItemType 426 | OnePasswordSource 427 | 428 | QSObjectSources 429 | 430 | OnePasswordSource 431 | OnePasswordSource 432 | 433 | QSTypeDefinitions 434 | 435 | QS1PasswordItemType 436 | 437 | icon 438 | QS1PasswordIcon 439 | name 440 | 1Password Items 441 | smartspace 442 | 6 443 | 444 | QS1PasswordURLType 445 | 446 | icon 447 | QS1PasswordIcon 448 | name 449 | URLs from 1Password 450 | 451 | 452 | 453 | QSRequirements 454 | 455 | bundles 456 | 457 | 458 | id 459 | com.agilebits.onepassword7 460 | name 461 | 1Password 7 462 | version 463 | 7.0.0 464 | 465 | 466 | minHostVersion 467 | 4012 468 | osRequired 469 | 10.12 470 | 471 | QSResourceAdditions 472 | 473 | QS1PasswordIcon 474 | 475 | 476 | bundle 477 | com.agilebits.onepassword7 478 | resource 479 | AppIcon.icns 480 | 481 | 482 | QS1PasswordVaultIcon 483 | 484 | 485 | bundle 486 | com.agilebits.onepassword7 487 | resource 488 | opvault.icns 489 | 490 | 491 | 492 | 493 | 494 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /OnePassword.xcodeproj/alcor.mode1: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ActivePerspectiveName 6 | Project 7 | AllowedModules 8 | 9 | 10 | BundleLoadPath 11 | 12 | MaxInstances 13 | n 14 | Module 15 | PBXSmartGroupTreeModule 16 | Name 17 | Groups and Files Outline View 18 | 19 | 20 | BundleLoadPath 21 | 22 | MaxInstances 23 | n 24 | Module 25 | PBXNavigatorGroup 26 | Name 27 | Editor 28 | 29 | 30 | BundleLoadPath 31 | 32 | MaxInstances 33 | n 34 | Module 35 | XCTaskListModule 36 | Name 37 | Task List 38 | 39 | 40 | BundleLoadPath 41 | 42 | MaxInstances 43 | n 44 | Module 45 | XCDetailModule 46 | Name 47 | File and Smart Group Detail Viewer 48 | 49 | 50 | BundleLoadPath 51 | 52 | MaxInstances 53 | 1 54 | Module 55 | PBXBuildResultsModule 56 | Name 57 | Detailed Build Results Viewer 58 | 59 | 60 | BundleLoadPath 61 | 62 | MaxInstances 63 | 1 64 | Module 65 | PBXProjectFindModule 66 | Name 67 | Project Batch Find Tool 68 | 69 | 70 | BundleLoadPath 71 | 72 | MaxInstances 73 | n 74 | Module 75 | PBXRunSessionModule 76 | Name 77 | Run Log 78 | 79 | 80 | BundleLoadPath 81 | 82 | MaxInstances 83 | n 84 | Module 85 | PBXBookmarksModule 86 | Name 87 | Bookmarks Tool 88 | 89 | 90 | BundleLoadPath 91 | 92 | MaxInstances 93 | n 94 | Module 95 | PBXClassBrowserModule 96 | Name 97 | Class Browser 98 | 99 | 100 | BundleLoadPath 101 | 102 | MaxInstances 103 | n 104 | Module 105 | PBXCVSModule 106 | Name 107 | Source Code Control Tool 108 | 109 | 110 | BundleLoadPath 111 | 112 | MaxInstances 113 | n 114 | Module 115 | PBXDebugBreakpointsModule 116 | Name 117 | Debug Breakpoints Tool 118 | 119 | 120 | BundleLoadPath 121 | 122 | MaxInstances 123 | n 124 | Module 125 | XCDockableInspector 126 | Name 127 | Inspector 128 | 129 | 130 | BundleLoadPath 131 | 132 | MaxInstances 133 | n 134 | Module 135 | PBXOpenQuicklyModule 136 | Name 137 | Open Quickly Tool 138 | 139 | 140 | BundleLoadPath 141 | 142 | MaxInstances 143 | 1 144 | Module 145 | PBXDebugSessionModule 146 | Name 147 | Debugger 148 | 149 | 150 | BundleLoadPath 151 | 152 | MaxInstances 153 | 1 154 | Module 155 | PBXDebugCLIModule 156 | Name 157 | Debug Console 158 | 159 | 160 | Description 161 | DefaultDescriptionKey 162 | DockingSystemVisible 163 | 164 | Extension 165 | mode1 166 | FavBarConfig 167 | 168 | PBXProjectModuleGUID 169 | 7FFA8ED70816CE0200A858CD 170 | XCBarModuleItemNames 171 | 172 | XCBarModuleItems 173 | 174 | 175 | FirstTimeWindowDisplayed 176 | 177 | Identifier 178 | com.apple.perspectives.project.mode1 179 | MajorVersion 180 | 31 181 | MinorVersion 182 | 1 183 | Name 184 | Default 185 | Notifications 186 | 187 | OpenEditors 188 | 189 | PerspectiveWidths 190 | 191 | -1 192 | -1 193 | 194 | Perspectives 195 | 196 | 197 | ChosenToolbarItems 198 | 199 | active-target-popup 200 | active-buildstyle-popup 201 | active-executable-popup 202 | action 203 | NSToolbarFlexibleSpaceItem 204 | buildOrClean 205 | build-and-runOrDebug 206 | com.apple.ide.PBXToolbarStopButton 207 | get-info 208 | toggle-editor 209 | NSToolbarFlexibleSpaceItem 210 | com.apple.pbx.toolbar.searchfield 211 | 212 | ControllerClassBaseName 213 | 214 | IconName 215 | WindowOfProjectWithEditor 216 | Identifier 217 | perspective.project 218 | IsVertical 219 | 220 | Layout 221 | 222 | 223 | ContentConfiguration 224 | 225 | PBXBottomSmartGroupGIDs 226 | 227 | 1C37FBAC04509CD000000102 228 | 1C37FAAC04509CD000000102 229 | 1C08E77C0454961000C914BD 230 | 1C37FABC05509CD000000102 231 | 1C37FABC05539CD112110102 232 | E2644B35053B69B200211256 233 | 1C37FABC04509CD000100104 234 | 1CC0EA4004350EF90044410B 235 | 1CC0EA4004350EF90041110B 236 | 237 | PBXProjectModuleGUID 238 | 1CE0B1FE06471DED0097A5F4 239 | PBXProjectModuleLabel 240 | Files 241 | PBXProjectStructureProvided 242 | yes 243 | PBXSmartGroupTreeModuleColumnData 244 | 245 | PBXSmartGroupTreeModuleColumnWidthsKey 246 | 247 | 186 248 | 249 | PBXSmartGroupTreeModuleColumnsKey_v4 250 | 251 | MainColumn 252 | 253 | 254 | PBXSmartGroupTreeModuleOutlineStateKey_v7 255 | 256 | PBXSmartGroupTreeModuleOutlineStateExpansionKey 257 | 258 | 0259C574FE90428111CA0C5A 259 | 1C37FBAC04509CD000000102 260 | 1C37FAAC04509CD000000102 261 | 1C37FABC05509CD000000102 262 | 263 | PBXSmartGroupTreeModuleOutlineStateSelectionKey 264 | 265 | 266 | 0 267 | 268 | 269 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey 270 | {{0, 0}, {186, 338}} 271 | 272 | PBXTopSmartGroupGIDs 273 | 274 | XCIncludePerspectivesSwitch 275 | 276 | XCSharingToken 277 | com.apple.Xcode.GFSharingToken 278 | 279 | GeometryConfiguration 280 | 281 | Frame 282 | {{0, 0}, {203, 356}} 283 | GroupTreeTableConfiguration 284 | 285 | MainColumn 286 | 186 287 | 288 | RubberWindowFrame 289 | 188 314 690 397 0 0 1024 746 290 | 291 | Module 292 | PBXSmartGroupTreeModule 293 | Proportion 294 | 203pt 295 | 296 | 297 | Dock 298 | 299 | 300 | ContentConfiguration 301 | 302 | PBXProjectModuleGUID 303 | 1CE0B20306471E060097A5F4 304 | PBXProjectModuleLabel 305 | MyNewFile14.java 306 | PBXSplitModuleInNavigatorKey 307 | 308 | Split0 309 | 310 | PBXProjectModuleGUID 311 | 1CE0B20406471E060097A5F4 312 | PBXProjectModuleLabel 313 | MyNewFile14.java 314 | 315 | SplitCount 316 | 1 317 | 318 | StatusBarVisibility 319 | 320 | 321 | GeometryConfiguration 322 | 323 | Frame 324 | {{0, 0}, {482, 0}} 325 | RubberWindowFrame 326 | 188 314 690 397 0 0 1024 746 327 | 328 | Module 329 | PBXNavigatorGroup 330 | Proportion 331 | 0pt 332 | 333 | 334 | BecomeActive 335 | 336 | ContentConfiguration 337 | 338 | PBXProjectModuleGUID 339 | 1CE0B20506471E060097A5F4 340 | PBXProjectModuleLabel 341 | Detail 342 | 343 | GeometryConfiguration 344 | 345 | Frame 346 | {{0, 5}, {482, 351}} 347 | RubberWindowFrame 348 | 188 314 690 397 0 0 1024 746 349 | 350 | Module 351 | XCDetailModule 352 | Proportion 353 | 351pt 354 | 355 | 356 | Proportion 357 | 482pt 358 | 359 | 360 | Name 361 | Project 362 | ServiceClasses 363 | 364 | XCModuleDock 365 | PBXSmartGroupTreeModule 366 | XCModuleDock 367 | PBXNavigatorGroup 368 | XCDetailModule 369 | 370 | TableOfContents 371 | 372 | 7F38C84B09637A34004E375B 373 | 1CE0B1FE06471DED0097A5F4 374 | 7F38C84C09637A34004E375B 375 | 1CE0B20306471E060097A5F4 376 | 1CE0B20506471E060097A5F4 377 | 378 | ToolbarConfiguration 379 | xcode.toolbar.config.default 380 | 381 | 382 | ControllerClassBaseName 383 | 384 | IconName 385 | WindowOfProject 386 | Identifier 387 | perspective.morph 388 | IsVertical 389 | 0 390 | Layout 391 | 392 | 393 | BecomeActive 394 | 1 395 | ContentConfiguration 396 | 397 | PBXBottomSmartGroupGIDs 398 | 399 | 1C37FBAC04509CD000000102 400 | 1C37FAAC04509CD000000102 401 | 1C08E77C0454961000C914BD 402 | 1C37FABC05509CD000000102 403 | 1C37FABC05539CD112110102 404 | E2644B35053B69B200211256 405 | 1C37FABC04509CD000100104 406 | 1CC0EA4004350EF90044410B 407 | 1CC0EA4004350EF90041110B 408 | 409 | PBXProjectModuleGUID 410 | 11E0B1FE06471DED0097A5F4 411 | PBXProjectModuleLabel 412 | Files 413 | PBXProjectStructureProvided 414 | yes 415 | PBXSmartGroupTreeModuleColumnData 416 | 417 | PBXSmartGroupTreeModuleColumnWidthsKey 418 | 419 | 186 420 | 421 | PBXSmartGroupTreeModuleColumnsKey_v4 422 | 423 | MainColumn 424 | 425 | 426 | PBXSmartGroupTreeModuleOutlineStateKey_v7 427 | 428 | PBXSmartGroupTreeModuleOutlineStateExpansionKey 429 | 430 | 29B97314FDCFA39411CA2CEA 431 | 1C37FABC05509CD000000102 432 | 433 | PBXSmartGroupTreeModuleOutlineStateSelectionKey 434 | 435 | 436 | 0 437 | 438 | 439 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey 440 | {{0, 0}, {186, 337}} 441 | 442 | PBXTopSmartGroupGIDs 443 | 444 | XCIncludePerspectivesSwitch 445 | 1 446 | XCSharingToken 447 | com.apple.Xcode.GFSharingToken 448 | 449 | GeometryConfiguration 450 | 451 | Frame 452 | {{0, 0}, {203, 355}} 453 | GroupTreeTableConfiguration 454 | 455 | MainColumn 456 | 186 457 | 458 | RubberWindowFrame 459 | 373 269 690 397 0 0 1440 878 460 | 461 | Module 462 | PBXSmartGroupTreeModule 463 | Proportion 464 | 100% 465 | 466 | 467 | Name 468 | Morph 469 | PreferredWidth 470 | 300 471 | ServiceClasses 472 | 473 | XCModuleDock 474 | PBXSmartGroupTreeModule 475 | 476 | TableOfContents 477 | 478 | 11E0B1FE06471DED0097A5F4 479 | 480 | ToolbarConfiguration 481 | xcode.toolbar.config.default.short 482 | 483 | 484 | PerspectivesBarVisible 485 | 486 | ShelfIsVisible 487 | 488 | SourceDescription 489 | file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Versions/A/Resources/XCPerspectivesSpecificationMode1.xcperspec' 490 | StatusbarIsVisible 491 | 492 | TimeStamp 493 | 0.0 494 | ToolbarDisplayMode 495 | 2 496 | ToolbarIsVisible 497 | 498 | ToolbarSizeMode 499 | 2 500 | Type 501 | Perspectives 502 | UpdateMessage 503 | The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? 504 | WindowJustification 505 | 5 506 | WindowOrderList 507 | 508 | /Volumes/Lore/Library/Application Support/Apple/Developer Tools/Project Templates/Quicksilver Plug-in/Quicksilver Plug-in.pbproj 509 | 510 | WindowString 511 | 188 314 690 397 0 0 1024 746 512 | WindowTools 513 | 514 | 515 | Identifier 516 | windowTool.build 517 | Layout 518 | 519 | 520 | Dock 521 | 522 | 523 | ContentConfiguration 524 | 525 | PBXProjectModuleGUID 526 | 1CD0528F0623707200166675 527 | PBXProjectModuleLabel 528 | <No Editor> 529 | PBXSplitModuleInNavigatorKey 530 | 531 | Split0 532 | 533 | PBXProjectModuleGUID 534 | 1CD052900623707200166675 535 | 536 | SplitCount 537 | 1 538 | 539 | StatusBarVisibility 540 | 1 541 | 542 | GeometryConfiguration 543 | 544 | Frame 545 | {{0, 0}, {500, 215}} 546 | RubberWindowFrame 547 | 192 257 500 500 0 0 1280 1002 548 | 549 | Module 550 | PBXNavigatorGroup 551 | Proportion 552 | 218pt 553 | 554 | 555 | BecomeActive 556 | 1 557 | ContentConfiguration 558 | 559 | PBXProjectModuleGUID 560 | XCMainBuildResultsModuleGUID 561 | PBXProjectModuleLabel 562 | Build 563 | 564 | GeometryConfiguration 565 | 566 | Frame 567 | {{0, 222}, {500, 236}} 568 | RubberWindowFrame 569 | 192 257 500 500 0 0 1280 1002 570 | 571 | Module 572 | PBXBuildResultsModule 573 | Proportion 574 | 236pt 575 | 576 | 577 | Proportion 578 | 458pt 579 | 580 | 581 | Name 582 | Build Results 583 | ServiceClasses 584 | 585 | PBXBuildResultsModule 586 | 587 | StatusbarIsVisible 588 | 1 589 | TableOfContents 590 | 591 | 1C78EAA5065D492600B07095 592 | 1C78EAA6065D492600B07095 593 | 1CD0528F0623707200166675 594 | XCMainBuildResultsModuleGUID 595 | 596 | ToolbarConfiguration 597 | xcode.toolbar.config.build 598 | WindowString 599 | 192 257 500 500 0 0 1280 1002 600 | 601 | 602 | Identifier 603 | windowTool.debugger 604 | Layout 605 | 606 | 607 | Dock 608 | 609 | 610 | ContentConfiguration 611 | 612 | Debugger 613 | 614 | HorizontalSplitView 615 | 616 | _collapsingFrameDimension 617 | 0.0 618 | _indexOfCollapsedView 619 | 0 620 | _percentageOfCollapsedView 621 | 0.0 622 | isCollapsed 623 | yes 624 | sizes 625 | 626 | {{0, 0}, {317, 164}} 627 | {{317, 0}, {377, 164}} 628 | 629 | 630 | VerticalSplitView 631 | 632 | _collapsingFrameDimension 633 | 0.0 634 | _indexOfCollapsedView 635 | 0 636 | _percentageOfCollapsedView 637 | 0.0 638 | isCollapsed 639 | yes 640 | sizes 641 | 642 | {{0, 0}, {694, 164}} 643 | {{0, 164}, {694, 216}} 644 | 645 | 646 | 647 | LauncherConfigVersion 648 | 8 649 | PBXProjectModuleGUID 650 | 1C162984064C10D400B95A72 651 | PBXProjectModuleLabel 652 | Debug - GLUTExamples (Underwater) 653 | 654 | GeometryConfiguration 655 | 656 | DebugConsoleDrawerSize 657 | {100, 120} 658 | DebugConsoleVisible 659 | None 660 | DebugConsoleWindowFrame 661 | {{200, 200}, {500, 300}} 662 | DebugSTDIOWindowFrame 663 | {{200, 200}, {500, 300}} 664 | Frame 665 | {{0, 0}, {694, 380}} 666 | RubberWindowFrame 667 | 321 238 694 422 0 0 1440 878 668 | 669 | Module 670 | PBXDebugSessionModule 671 | Proportion 672 | 100% 673 | 674 | 675 | Proportion 676 | 100% 677 | 678 | 679 | Name 680 | Debugger 681 | ServiceClasses 682 | 683 | PBXDebugSessionModule 684 | 685 | StatusbarIsVisible 686 | 1 687 | TableOfContents 688 | 689 | 1CD10A99069EF8BA00B06720 690 | 1C0AD2AB069F1E9B00FABCE6 691 | 1C162984064C10D400B95A72 692 | 1C0AD2AC069F1E9B00FABCE6 693 | 694 | ToolbarConfiguration 695 | xcode.toolbar.config.debug 696 | WindowString 697 | 321 238 694 422 0 0 1440 878 698 | WindowToolGUID 699 | 1CD10A99069EF8BA00B06720 700 | WindowToolIsVisible 701 | 0 702 | 703 | 704 | Identifier 705 | windowTool.find 706 | Layout 707 | 708 | 709 | Dock 710 | 711 | 712 | Dock 713 | 714 | 715 | ContentConfiguration 716 | 717 | PBXProjectModuleGUID 718 | 1CDD528C0622207200134675 719 | PBXProjectModuleLabel 720 | <No Editor> 721 | PBXSplitModuleInNavigatorKey 722 | 723 | Split0 724 | 725 | PBXProjectModuleGUID 726 | 1CD0528D0623707200166675 727 | 728 | SplitCount 729 | 1 730 | 731 | StatusBarVisibility 732 | 1 733 | 734 | GeometryConfiguration 735 | 736 | Frame 737 | {{0, 0}, {781, 167}} 738 | RubberWindowFrame 739 | 62 385 781 470 0 0 1440 878 740 | 741 | Module 742 | PBXNavigatorGroup 743 | Proportion 744 | 781pt 745 | 746 | 747 | Proportion 748 | 50% 749 | 750 | 751 | BecomeActive 752 | 1 753 | ContentConfiguration 754 | 755 | PBXProjectModuleGUID 756 | 1CD0528E0623707200166675 757 | PBXProjectModuleLabel 758 | Project Find 759 | 760 | GeometryConfiguration 761 | 762 | Frame 763 | {{8, 0}, {773, 254}} 764 | RubberWindowFrame 765 | 62 385 781 470 0 0 1440 878 766 | 767 | Module 768 | PBXProjectFindModule 769 | Proportion 770 | 50% 771 | 772 | 773 | Proportion 774 | 428pt 775 | 776 | 777 | Name 778 | Project Find 779 | ServiceClasses 780 | 781 | PBXProjectFindModule 782 | 783 | StatusbarIsVisible 784 | 1 785 | TableOfContents 786 | 787 | 1C530D57069F1CE1000CFCEE 788 | 1C530D58069F1CE1000CFCEE 789 | 1C530D59069F1CE1000CFCEE 790 | 1CDD528C0622207200134675 791 | 1C530D5A069F1CE1000CFCEE 792 | 1CE0B1FE06471DED0097A5F4 793 | 1CD0528E0623707200166675 794 | 795 | WindowString 796 | 62 385 781 470 0 0 1440 878 797 | WindowToolGUID 798 | 1C530D57069F1CE1000CFCEE 799 | WindowToolIsVisible 800 | 0 801 | 802 | 803 | Identifier 804 | MENUSEPARATOR 805 | 806 | 807 | Identifier 808 | windowTool.debuggerConsole 809 | Layout 810 | 811 | 812 | Dock 813 | 814 | 815 | BecomeActive 816 | 1 817 | ContentConfiguration 818 | 819 | PBXProjectModuleGUID 820 | 1C78EAAC065D492600B07095 821 | PBXProjectModuleLabel 822 | Debugger Console 823 | 824 | GeometryConfiguration 825 | 826 | Frame 827 | {{0, 0}, {440, 358}} 828 | RubberWindowFrame 829 | 650 41 440 400 0 0 1280 1002 830 | 831 | Module 832 | PBXDebugCLIModule 833 | Proportion 834 | 358pt 835 | 836 | 837 | Proportion 838 | 358pt 839 | 840 | 841 | Name 842 | Debugger Console 843 | ServiceClasses 844 | 845 | PBXDebugCLIModule 846 | 847 | StatusbarIsVisible 848 | 1 849 | TableOfContents 850 | 851 | 1C78EAAD065D492600B07095 852 | 1C78EAAE065D492600B07095 853 | 1C78EAAC065D492600B07095 854 | 855 | WindowString 856 | 650 41 440 400 0 0 1280 1002 857 | 858 | 859 | Identifier 860 | windowTool.run 861 | Layout 862 | 863 | 864 | Dock 865 | 866 | 867 | ContentConfiguration 868 | 869 | LauncherConfigVersion 870 | 3 871 | PBXProjectModuleGUID 872 | 1CD0528B0623707200166675 873 | PBXProjectModuleLabel 874 | Run 875 | Runner 876 | 877 | HorizontalSplitView 878 | 879 | _collapsingFrameDimension 880 | 0.0 881 | _indexOfCollapsedView 882 | 0 883 | _percentageOfCollapsedView 884 | 0.0 885 | isCollapsed 886 | yes 887 | sizes 888 | 889 | {{0, 0}, {493, 167}} 890 | {{0, 176}, {493, 267}} 891 | 892 | 893 | VerticalSplitView 894 | 895 | _collapsingFrameDimension 896 | 0.0 897 | _indexOfCollapsedView 898 | 0 899 | _percentageOfCollapsedView 900 | 0.0 901 | isCollapsed 902 | yes 903 | sizes 904 | 905 | {{0, 0}, {405, 443}} 906 | {{414, 0}, {514, 443}} 907 | 908 | 909 | 910 | 911 | GeometryConfiguration 912 | 913 | Frame 914 | {{0, 0}, {460, 159}} 915 | RubberWindowFrame 916 | 316 696 459 200 0 0 1280 1002 917 | 918 | Module 919 | PBXRunSessionModule 920 | Proportion 921 | 159pt 922 | 923 | 924 | Proportion 925 | 159pt 926 | 927 | 928 | Name 929 | Run Log 930 | ServiceClasses 931 | 932 | PBXRunSessionModule 933 | 934 | StatusbarIsVisible 935 | 1 936 | TableOfContents 937 | 938 | 1C0AD2B3069F1EA900FABCE6 939 | 1C0AD2B4069F1EA900FABCE6 940 | 1CD0528B0623707200166675 941 | 1C0AD2B5069F1EA900FABCE6 942 | 943 | ToolbarConfiguration 944 | xcode.toolbar.config.run 945 | WindowString 946 | 316 696 459 200 0 0 1280 1002 947 | WindowToolGUID 948 | 1C0AD2B3069F1EA900FABCE6 949 | WindowToolIsVisible 950 | 0 951 | 952 | 953 | Identifier 954 | windowTool.scm 955 | Layout 956 | 957 | 958 | Dock 959 | 960 | 961 | ContentConfiguration 962 | 963 | PBXProjectModuleGUID 964 | 1C78EAB2065D492600B07095 965 | PBXProjectModuleLabel 966 | <No Editor> 967 | PBXSplitModuleInNavigatorKey 968 | 969 | Split0 970 | 971 | PBXProjectModuleGUID 972 | 1C78EAB3065D492600B07095 973 | 974 | SplitCount 975 | 1 976 | 977 | StatusBarVisibility 978 | 1 979 | 980 | GeometryConfiguration 981 | 982 | Frame 983 | {{0, 0}, {452, 0}} 984 | RubberWindowFrame 985 | 743 379 452 308 0 0 1280 1002 986 | 987 | Module 988 | PBXNavigatorGroup 989 | Proportion 990 | 0pt 991 | 992 | 993 | BecomeActive 994 | 1 995 | ContentConfiguration 996 | 997 | PBXProjectModuleGUID 998 | 1CD052920623707200166675 999 | PBXProjectModuleLabel 1000 | SCM 1001 | 1002 | GeometryConfiguration 1003 | 1004 | ConsoleFrame 1005 | {{0, 259}, {452, 0}} 1006 | Frame 1007 | {{0, 7}, {452, 259}} 1008 | RubberWindowFrame 1009 | 743 379 452 308 0 0 1280 1002 1010 | TableConfiguration 1011 | 1012 | Status 1013 | 30 1014 | FileName 1015 | 199 1016 | Path 1017 | 197.09500122070312 1018 | 1019 | TableFrame 1020 | {{0, 0}, {452, 250}} 1021 | 1022 | Module 1023 | PBXCVSModule 1024 | Proportion 1025 | 262pt 1026 | 1027 | 1028 | Proportion 1029 | 266pt 1030 | 1031 | 1032 | Name 1033 | SCM 1034 | ServiceClasses 1035 | 1036 | PBXCVSModule 1037 | 1038 | StatusbarIsVisible 1039 | 1 1040 | TableOfContents 1041 | 1042 | 1C78EAB4065D492600B07095 1043 | 1C78EAB5065D492600B07095 1044 | 1C78EAB2065D492600B07095 1045 | 1CD052920623707200166675 1046 | 1047 | ToolbarConfiguration 1048 | xcode.toolbar.config.scm 1049 | WindowString 1050 | 743 379 452 308 0 0 1280 1002 1051 | 1052 | 1053 | Identifier 1054 | windowTool.breakpoints 1055 | IsVertical 1056 | 1057 | Layout 1058 | 1059 | 1060 | Dock 1061 | 1062 | 1063 | BecomeActive 1064 | 1065 | ContentConfiguration 1066 | 1067 | PBXBottomSmartGroupGIDs 1068 | 1069 | 1C77FABC04509CD000000102 1070 | 1071 | PBXProjectModuleGUID 1072 | 1CE0B1FE06471DED0097A5F4 1073 | PBXProjectModuleLabel 1074 | Files 1075 | PBXProjectStructureProvided 1076 | no 1077 | PBXSmartGroupTreeModuleColumnData 1078 | 1079 | PBXSmartGroupTreeModuleColumnWidthsKey 1080 | 1081 | 168 1082 | 1083 | PBXSmartGroupTreeModuleColumnsKey_v4 1084 | 1085 | MainColumn 1086 | 1087 | 1088 | PBXSmartGroupTreeModuleOutlineStateKey_v7 1089 | 1090 | PBXSmartGroupTreeModuleOutlineStateExpansionKey 1091 | 1092 | 1C77FABC04509CD000000102 1093 | 1094 | PBXSmartGroupTreeModuleOutlineStateSelectionKey 1095 | 1096 | 1097 | 0 1098 | 1099 | 1100 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey 1101 | {{0, 0}, {168, 350}} 1102 | 1103 | PBXTopSmartGroupGIDs 1104 | 1105 | XCIncludePerspectivesSwitch 1106 | 1107 | 1108 | GeometryConfiguration 1109 | 1110 | Frame 1111 | {{0, 0}, {185, 368}} 1112 | GroupTreeTableConfiguration 1113 | 1114 | MainColumn 1115 | 168 1116 | 1117 | RubberWindowFrame 1118 | 315 424 744 409 0 0 1440 878 1119 | 1120 | Module 1121 | PBXSmartGroupTreeModule 1122 | Proportion 1123 | 185pt 1124 | 1125 | 1126 | ContentConfiguration 1127 | 1128 | PBXProjectModuleGUID 1129 | 1CA1AED706398EBD00589147 1130 | PBXProjectModuleLabel 1131 | Detail 1132 | 1133 | GeometryConfiguration 1134 | 1135 | Frame 1136 | {{190, 0}, {554, 368}} 1137 | RubberWindowFrame 1138 | 315 424 744 409 0 0 1440 878 1139 | 1140 | Module 1141 | XCDetailModule 1142 | Proportion 1143 | 554pt 1144 | 1145 | 1146 | Proportion 1147 | 368pt 1148 | 1149 | 1150 | MajorVersion 1151 | 2 1152 | MinorVersion 1153 | 0 1154 | Name 1155 | Breakpoints 1156 | ServiceClasses 1157 | 1158 | PBXSmartGroupTreeModule 1159 | XCDetailModule 1160 | 1161 | StatusbarIsVisible 1162 | 1163 | TableOfContents 1164 | 1165 | 1CDDB66807F98D9800BB5817 1166 | 1CDDB66907F98D9800BB5817 1167 | 1CE0B1FE06471DED0097A5F4 1168 | 1CA1AED706398EBD00589147 1169 | 1170 | ToolbarConfiguration 1171 | xcode.toolbar.config.breakpoints 1172 | WindowString 1173 | 315 424 744 409 0 0 1440 878 1174 | WindowToolGUID 1175 | 1CDDB66807F98D9800BB5817 1176 | WindowToolIsVisible 1177 | 1178 | 1179 | 1180 | Identifier 1181 | windowTool.debugAnimator 1182 | Layout 1183 | 1184 | 1185 | Dock 1186 | 1187 | 1188 | Module 1189 | PBXNavigatorGroup 1190 | Proportion 1191 | 100% 1192 | 1193 | 1194 | Proportion 1195 | 100% 1196 | 1197 | 1198 | Name 1199 | Debug Visualizer 1200 | ServiceClasses 1201 | 1202 | PBXNavigatorGroup 1203 | 1204 | StatusbarIsVisible 1205 | 1206 | ToolbarConfiguration 1207 | xcode.toolbar.config.debugAnimator 1208 | WindowString 1209 | 100 100 700 500 0 0 1280 1002 1210 | 1211 | 1212 | Identifier 1213 | windowTool.bookmarks 1214 | Layout 1215 | 1216 | 1217 | Dock 1218 | 1219 | 1220 | Module 1221 | PBXBookmarksModule 1222 | Proportion 1223 | 100% 1224 | 1225 | 1226 | Proportion 1227 | 100% 1228 | 1229 | 1230 | Name 1231 | Bookmarks 1232 | ServiceClasses 1233 | 1234 | PBXBookmarksModule 1235 | 1236 | StatusbarIsVisible 1237 | 0 1238 | WindowString 1239 | 538 42 401 187 0 0 1280 1002 1240 | 1241 | 1242 | Identifier 1243 | windowTool.classBrowser 1244 | Layout 1245 | 1246 | 1247 | Dock 1248 | 1249 | 1250 | BecomeActive 1251 | 1 1252 | ContentConfiguration 1253 | 1254 | OptionsSetName 1255 | Hierarchy, all classes 1256 | PBXProjectModuleGUID 1257 | 1CA6456E063B45B4001379D8 1258 | PBXProjectModuleLabel 1259 | Class Browser - NSObject 1260 | 1261 | GeometryConfiguration 1262 | 1263 | ClassesFrame 1264 | {{0, 0}, {374, 96}} 1265 | ClassesTreeTableConfiguration 1266 | 1267 | PBXClassNameColumnIdentifier 1268 | 208 1269 | PBXClassBookColumnIdentifier 1270 | 22 1271 | 1272 | Frame 1273 | {{0, 0}, {630, 331}} 1274 | MembersFrame 1275 | {{0, 105}, {374, 395}} 1276 | MembersTreeTableConfiguration 1277 | 1278 | PBXMemberTypeIconColumnIdentifier 1279 | 22 1280 | PBXMemberNameColumnIdentifier 1281 | 216 1282 | PBXMemberTypeColumnIdentifier 1283 | 97 1284 | PBXMemberBookColumnIdentifier 1285 | 22 1286 | 1287 | PBXModuleWindowStatusBarHidden2 1288 | 1 1289 | RubberWindowFrame 1290 | 385 179 630 352 0 0 1440 878 1291 | 1292 | Module 1293 | PBXClassBrowserModule 1294 | Proportion 1295 | 332pt 1296 | 1297 | 1298 | Proportion 1299 | 332pt 1300 | 1301 | 1302 | Name 1303 | Class Browser 1304 | ServiceClasses 1305 | 1306 | PBXClassBrowserModule 1307 | 1308 | StatusbarIsVisible 1309 | 0 1310 | TableOfContents 1311 | 1312 | 1C0AD2AF069F1E9B00FABCE6 1313 | 1C0AD2B0069F1E9B00FABCE6 1314 | 1CA6456E063B45B4001379D8 1315 | 1316 | ToolbarConfiguration 1317 | xcode.toolbar.config.classbrowser 1318 | WindowString 1319 | 385 179 630 352 0 0 1440 878 1320 | WindowToolGUID 1321 | 1C0AD2AF069F1E9B00FABCE6 1322 | WindowToolIsVisible 1323 | 0 1324 | 1325 | 1326 | 1327 | 1328 | -------------------------------------------------------------------------------- /OnePassword.xcodeproj/alcor.pbxuser: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | 0259C573FE90428111CA0C5A /* Project object */ = { 4 | activeBuildConfigurationName = Release; 5 | activeBuildStyle = 2E58F360FFB2326E11CA0CBA /* Development */; 6 | activeExecutable = 7FFA8ECD0816CDED00A858CD /* Quicksilver */; 7 | activeTarget = 8D1AC9600486D14A00FE50C9 /* «PROJECTNAME» */; 8 | codeSenseManager = 7FFA8ED90816CE0200A858CD /* Code sense */; 9 | executables = ( 10 | 7FFA8ECD0816CDED00A858CD /* Quicksilver */, 11 | ); 12 | perUserDictionary = { 13 | PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = { 14 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 15 | PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID; 16 | PBXFileTableDataSourceColumnWidthsKey = ( 17 | 22, 18 | 300, 19 | 130, 20 | ); 21 | PBXFileTableDataSourceColumnsKey = ( 22 | PBXExecutablesDataSource_ActiveFlagID, 23 | PBXExecutablesDataSource_NameID, 24 | PBXExecutablesDataSource_CommentsID, 25 | ); 26 | }; 27 | PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { 28 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 29 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; 30 | PBXFileTableDataSourceColumnWidthsKey = ( 31 | 20, 32 | 243, 33 | 20, 34 | 48, 35 | 43, 36 | 43, 37 | 20, 38 | ); 39 | PBXFileTableDataSourceColumnsKey = ( 40 | PBXFileDataSource_FiletypeID, 41 | PBXFileDataSource_Filename_ColumnID, 42 | PBXFileDataSource_Built_ColumnID, 43 | PBXFileDataSource_ObjectSize_ColumnID, 44 | PBXFileDataSource_Errors_ColumnID, 45 | PBXFileDataSource_Warnings_ColumnID, 46 | PBXFileDataSource_Target_ColumnID, 47 | ); 48 | }; 49 | PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { 50 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 51 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; 52 | PBXFileTableDataSourceColumnWidthsKey = ( 53 | 20, 54 | 200, 55 | 63, 56 | 20, 57 | 48, 58 | 43, 59 | 43, 60 | ); 61 | PBXFileTableDataSourceColumnsKey = ( 62 | PBXFileDataSource_FiletypeID, 63 | PBXFileDataSource_Filename_ColumnID, 64 | PBXTargetDataSource_PrimaryAttribute, 65 | PBXFileDataSource_Built_ColumnID, 66 | PBXFileDataSource_ObjectSize_ColumnID, 67 | PBXFileDataSource_Errors_ColumnID, 68 | PBXFileDataSource_Warnings_ColumnID, 69 | ); 70 | }; 71 | PBXPerProjectTemplateStateSaveDate = 157514286; 72 | PBXWorkspaceStateSaveDate = 157514286; 73 | }; 74 | sourceControlManager = 7FFA8ED80816CE0200A858CD /* Source Control */; 75 | userBuildSettings = { 76 | }; 77 | }; 78 | 7FFA8ECD0816CDED00A858CD /* Quicksilver */ = { 79 | isa = PBXExecutable; 80 | activeArgIndex = 2147483647; 81 | activeArgIndices = ( 82 | ); 83 | argumentStrings = ( 84 | ); 85 | autoAttachOnCrash = 1; 86 | configStateDict = { 87 | }; 88 | customDataFormattersEnabled = 1; 89 | debuggerPlugin = GDBDebugging; 90 | disassemblyDisplayState = 0; 91 | dylibVariantSuffix = ""; 92 | enableDebugStr = 1; 93 | environmentEntries = ( 94 | { 95 | active = YES; 96 | name = NSDebugEnabled; 97 | value = YES; 98 | }, 99 | ); 100 | executableSystemSymbolLevel = 0; 101 | executableUserSymbolLevel = 0; 102 | launchableReference = 7FFA8ECE0816CDED00A858CD /* Quicksilver.app */; 103 | libgmallocEnabled = 0; 104 | name = Quicksilver; 105 | sourceDirectories = ( 106 | ); 107 | }; 108 | 7FFA8ECE0816CDED00A858CD /* Quicksilver.app */ = { 109 | isa = PBXFileReference; 110 | lastKnownFileType = wrapper.application; 111 | name = Quicksilver.app; 112 | path = /Applications/Quicksilver.app; 113 | sourceTree = ""; 114 | }; 115 | 7FFA8ED80816CE0200A858CD /* Source Control */ = { 116 | isa = PBXSourceControlManager; 117 | fallbackIsa = XCSourceControlManager; 118 | isSCMEnabled = 0; 119 | scmConfiguration = { 120 | }; 121 | scmType = ""; 122 | }; 123 | 7FFA8ED90816CE0200A858CD /* Code sense */ = { 124 | isa = PBXCodeSenseManager; 125 | indexTemplatePath = ""; 126 | }; 127 | 8D1AC9600486D14A00FE50C9 /* «PROJECTNAME» */ = { 128 | activeExec = 0; 129 | }; 130 | } 131 | -------------------------------------------------------------------------------- /OnePassword.xcodeproj/patrick.pbxuser: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | 0259C573FE90428111CA0C5A /* Project object */ = { 4 | activeArchitecturePreference = i386; 5 | activeBuildConfigurationName = Release; 6 | activeSDKPreference = macosx10.5; 7 | activeTarget = 8D1AC9600486D14A00FE50C9 /* OnePassword */; 8 | addToTargets = ( 9 | 8D1AC9600486D14A00FE50C9 /* OnePassword */, 10 | ); 11 | breakpoints = ( 12 | CD3ABD4F1379722F0091BB2D /* OnePasswordAction.m:31 */, 13 | CD2426711383E00B005ED0E2 /* OnePasswordAction.m:44 */, 14 | CD3E96DD13C5EF48000BFB0D /* OnePasswordAction.m:93 */, 15 | CD453BA213CAE06B004B5319 /* OnePasswordAction.m:125 */, 16 | ); 17 | codeSenseManager = CDB5BB8C110109170001C0D3 /* Code sense */; 18 | perUserDictionary = { 19 | "PBXConfiguration.PBXBreakpointsDataSource.v1:1CA1AED706398EBD00589147" = { 20 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 21 | PBXFileTableDataSourceColumnSortingKey = PBXBreakpointsDataSource_BreakpointID; 22 | PBXFileTableDataSourceColumnWidthsKey = ( 23 | 20, 24 | 20, 25 | 198, 26 | 20, 27 | 99, 28 | 99, 29 | 29, 30 | 20, 31 | ); 32 | PBXFileTableDataSourceColumnsKey = ( 33 | PBXBreakpointsDataSource_ActionID, 34 | PBXBreakpointsDataSource_TypeID, 35 | PBXBreakpointsDataSource_BreakpointID, 36 | PBXBreakpointsDataSource_UseID, 37 | PBXBreakpointsDataSource_LocationID, 38 | PBXBreakpointsDataSource_ConditionID, 39 | PBXBreakpointsDataSource_IgnoreCountID, 40 | PBXBreakpointsDataSource_ContinueID, 41 | ); 42 | }; 43 | PBXConfiguration.PBXFileTableDataSource3.PBXBookmarksDataSource = { 44 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 45 | PBXFileTableDataSourceColumnSortingKey = PBXBookmarksDataSource_NameID; 46 | PBXFileTableDataSourceColumnWidthsKey = ( 47 | 200, 48 | 200, 49 | 588, 50 | ); 51 | PBXFileTableDataSourceColumnsKey = ( 52 | PBXBookmarksDataSource_LocationID, 53 | PBXBookmarksDataSource_NameID, 54 | PBXBookmarksDataSource_CommentsID, 55 | ); 56 | }; 57 | PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = { 58 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 59 | PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID; 60 | PBXFileTableDataSourceColumnWidthsKey = ( 61 | 22, 62 | 300, 63 | 559, 64 | ); 65 | PBXFileTableDataSourceColumnsKey = ( 66 | PBXExecutablesDataSource_ActiveFlagID, 67 | PBXExecutablesDataSource_NameID, 68 | PBXExecutablesDataSource_CommentsID, 69 | ); 70 | }; 71 | PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { 72 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 73 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Target_ColumnID; 74 | PBXFileTableDataSourceColumnWidthsKey = ( 75 | 20, 76 | 685, 77 | 20, 78 | 48, 79 | 43, 80 | 43, 81 | 20, 82 | ); 83 | PBXFileTableDataSourceColumnsKey = ( 84 | PBXFileDataSource_FiletypeID, 85 | PBXFileDataSource_Filename_ColumnID, 86 | PBXFileDataSource_Built_ColumnID, 87 | PBXFileDataSource_ObjectSize_ColumnID, 88 | PBXFileDataSource_Errors_ColumnID, 89 | PBXFileDataSource_Warnings_ColumnID, 90 | PBXFileDataSource_Target_ColumnID, 91 | ); 92 | }; 93 | PBXConfiguration.PBXFileTableDataSource3.PBXFindDataSource = { 94 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 95 | PBXFileTableDataSourceColumnSortingKey = PBXFindDataSource_LocationID; 96 | PBXFileTableDataSourceColumnWidthsKey = ( 97 | 200, 98 | 1051, 99 | ); 100 | PBXFileTableDataSourceColumnsKey = ( 101 | PBXFindDataSource_MessageID, 102 | PBXFindDataSource_LocationID, 103 | ); 104 | }; 105 | PBXConfiguration.PBXFileTableDataSource3.PBXSymbolsDataSource = { 106 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 107 | PBXFileTableDataSourceColumnSortingKey = PBXSymbolsDataSource_SymbolNameID; 108 | PBXFileTableDataSourceColumnWidthsKey = ( 109 | 16, 110 | 200, 111 | 50, 112 | 611.20849609375, 113 | ); 114 | PBXFileTableDataSourceColumnsKey = ( 115 | PBXSymbolsDataSource_SymbolTypeIconID, 116 | PBXSymbolsDataSource_SymbolNameID, 117 | PBXSymbolsDataSource_SymbolTypeID, 118 | PBXSymbolsDataSource_ReferenceNameID, 119 | ); 120 | }; 121 | PBXConfiguration.PBXFileTableDataSource3.XCSCMDataSource = { 122 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 123 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; 124 | PBXFileTableDataSourceColumnWidthsKey = ( 125 | 20, 126 | 20, 127 | 647, 128 | 20, 129 | 48, 130 | 43, 131 | 43, 132 | 20, 133 | ); 134 | PBXFileTableDataSourceColumnsKey = ( 135 | PBXFileDataSource_SCM_ColumnID, 136 | PBXFileDataSource_FiletypeID, 137 | PBXFileDataSource_Filename_ColumnID, 138 | PBXFileDataSource_Built_ColumnID, 139 | PBXFileDataSource_ObjectSize_ColumnID, 140 | PBXFileDataSource_Errors_ColumnID, 141 | PBXFileDataSource_Warnings_ColumnID, 142 | PBXFileDataSource_Target_ColumnID, 143 | ); 144 | }; 145 | PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { 146 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 147 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; 148 | PBXFileTableDataSourceColumnWidthsKey = ( 149 | 20, 150 | 645, 151 | 60, 152 | 20, 153 | 48, 154 | 43, 155 | 43, 156 | ); 157 | PBXFileTableDataSourceColumnsKey = ( 158 | PBXFileDataSource_FiletypeID, 159 | PBXFileDataSource_Filename_ColumnID, 160 | PBXTargetDataSource_PrimaryAttribute, 161 | PBXFileDataSource_Built_ColumnID, 162 | PBXFileDataSource_ObjectSize_ColumnID, 163 | PBXFileDataSource_Errors_ColumnID, 164 | PBXFileDataSource_Warnings_ColumnID, 165 | ); 166 | }; 167 | PBXPerProjectTemplateStateSaveDate = 339881793; 168 | PBXWorkspaceStateSaveDate = 339881793; 169 | }; 170 | perUserProjectItems = { 171 | CD3E901213C5B146000BFB0D = CD3E901213C5B146000BFB0D /* PBXTextBookmark */; 172 | CD95F00711623A6000967D3C = CD95F00711623A6000967D3C /* PBXTextBookmark */; 173 | CD9E5CEB1158DCDF00CCCA80 = CD9E5CEB1158DCDF00CCCA80 /* PlistBookmark */; 174 | CDA8A1AD13F050F400EE351E = CDA8A1AD13F050F400EE351E /* PlistBookmark */; 175 | CDA8A1AE13F050F400EE351E = CDA8A1AE13F050F400EE351E /* PBXTextBookmark */; 176 | CDA8A1AF13F050F400EE351E = CDA8A1AF13F050F400EE351E /* PBXTextBookmark */; 177 | CDA8A1B113F050F400EE351E = CDA8A1B113F050F400EE351E /* PBXTextBookmark */; 178 | CDA8A1B213F050F400EE351E = CDA8A1B213F050F400EE351E /* PBXTextBookmark */; 179 | CDA8A1DB13F0515A00EE351E = CDA8A1DB13F0515A00EE351E /* PBXTextBookmark */; 180 | CDA8A1E613F0553D00EE351E = CDA8A1E613F0553D00EE351E /* PBXTextBookmark */; 181 | CDA8A1F513F055B100EE351E = CDA8A1F513F055B100EE351E /* PBXTextBookmark */; 182 | CDD8746E113166F7009ED78C = CDD8746E113166F7009ED78C /* PBXTextBookmark */; 183 | CDD87470113166F7009ED78C = CDD87470113166F7009ED78C /* PBXTextBookmark */; 184 | CDD8747611316720009ED78C = CDD8747611316720009ED78C /* PBXTextBookmark */; 185 | }; 186 | sourceControlManager = CDB5BB8B110109170001C0D3 /* Source Control */; 187 | userBuildSettings = { 188 | }; 189 | }; 190 | 32DBCF980370C29C00C91783 /* OnePassword_Prefix.pch */ = { 191 | uiCtxt = { 192 | sepNavIntBoundsRect = "{{0, 0}, {863, 273}}"; 193 | sepNavSelRange = "{259, 0}"; 194 | sepNavVisRange = "{0, 573}"; 195 | sepNavWindowFrame = "{{81, 0}, {1199, 778}}"; 196 | }; 197 | }; 198 | 8D1AC9600486D14A00FE50C9 /* OnePassword */ = { 199 | activeExec = 0; 200 | }; 201 | 8D1AC9730486D14A00FE50C9 /* Info.plist */ = { 202 | uiCtxt = { 203 | sepNavWindowFrame = "{{346, 59}, {970, 778}}"; 204 | }; 205 | }; 206 | BBF5817A0B1D9D84003CFF55 /* OnePasswordAction.h */ = { 207 | uiCtxt = { 208 | sepNavIntBoundsRect = "{{0, 0}, {1540, 956}}"; 209 | sepNavSelRange = "{1570, 0}"; 210 | sepNavVisRange = "{0, 1869}"; 211 | sepNavWindowFrame = "{{81, 0}, {1599, 1028}}"; 212 | }; 213 | }; 214 | BBF5817B0B1D9D84003CFF55 /* OnePasswordAction.m */ = { 215 | uiCtxt = { 216 | sepNavIntBoundsRect = "{{0, 0}, {1140, 3042}}"; 217 | sepNavSelRange = "{3358, 15}"; 218 | sepNavVisRange = "{4660, 1886}"; 219 | sepNavWindowFrame = "{{131, 250}, {1199, 778}}"; 220 | }; 221 | }; 222 | BBF581820B1D9DC3003CFF55 /* OnePasswordSource.h */ = { 223 | uiCtxt = { 224 | sepNavIntBoundsRect = "{{0, 0}, {863, 546}}"; 225 | sepNavSelRange = "{944, 0}"; 226 | sepNavVisRange = "{442, 838}"; 227 | sepNavWindowFrame = "{{81, 0}, {1199, 778}}"; 228 | }; 229 | }; 230 | BBF581830B1D9DC3003CFF55 /* OnePasswordSource.m */ = { 231 | uiCtxt = { 232 | sepNavIntBoundsRect = "{{0, 0}, {1151, 3445}}"; 233 | sepNavSelRange = "{5343, 0}"; 234 | sepNavVisRange = "{4683, 2172}"; 235 | sepNavWindowFrame = "{{70, 0}, {1210, 778}}"; 236 | }; 237 | }; 238 | CD2426711383E00B005ED0E2 /* OnePasswordAction.m:44 */ = { 239 | isa = PBXFileBreakpoint; 240 | actions = ( 241 | ); 242 | breakpointStyle = 0; 243 | continueAfterActions = 0; 244 | countType = 0; 245 | delayBeforeContinue = 0; 246 | fileReference = BBF5817B0B1D9D84003CFF55 /* OnePasswordAction.m */; 247 | functionName = "-validIndirectObjectsForAction:directObject:"; 248 | hitCount = 0; 249 | ignoreCount = 0; 250 | lineNumber = 44; 251 | modificationTime = 338830911.6720031; 252 | originalNumberOfMultipleMatches = 1; 253 | state = 0; 254 | }; 255 | CD3ABD4F1379722F0091BB2D /* OnePasswordAction.m:31 */ = { 256 | isa = PBXFileBreakpoint; 257 | actions = ( 258 | ); 259 | breakpointStyle = 0; 260 | continueAfterActions = 0; 261 | countType = 0; 262 | delayBeforeContinue = 0; 263 | fileReference = BBF5817B0B1D9D84003CFF55 /* OnePasswordAction.m */; 264 | functionName = "-validActionsForDirectObject:indirectObject:"; 265 | hitCount = 0; 266 | ignoreCount = 0; 267 | lineNumber = 31; 268 | location = OnePassword; 269 | modificationTime = 338830911.671972; 270 | originalNumberOfMultipleMatches = 1; 271 | state = 2; 272 | }; 273 | CD3E8FEF13C5B0E7000BFB0D /* QSObjectSource.h */ = { 274 | isa = PBXFileReference; 275 | lastKnownFileType = sourcecode.c.h; 276 | name = QSObjectSource.h; 277 | path = /Users/patrick/Library/Frameworks/QSCore.framework/Headers/QSObjectSource.h; 278 | sourceTree = ""; 279 | }; 280 | CD3E901213C5B146000BFB0D /* PBXTextBookmark */ = { 281 | isa = PBXTextBookmark; 282 | fRef = CD3E8FEF13C5B0E7000BFB0D /* QSObjectSource.h */; 283 | name = "QSObjectSource.h: 19"; 284 | rLen = 39; 285 | rLoc = 637; 286 | rType = 0; 287 | vrLen = 798; 288 | vrLoc = 0; 289 | }; 290 | CD3E96DD13C5EF48000BFB0D /* OnePasswordAction.m:93 */ = { 291 | isa = PBXFileBreakpoint; 292 | actions = ( 293 | ); 294 | breakpointStyle = 0; 295 | continueAfterActions = 0; 296 | countType = 0; 297 | delayBeforeContinue = 0; 298 | fileReference = BBF5817B0B1D9D84003CFF55 /* OnePasswordAction.m */; 299 | functionName = "-goAndFill:with:"; 300 | hitCount = 0; 301 | ignoreCount = 0; 302 | lineNumber = 93; 303 | modificationTime = 338830911.67203; 304 | originalNumberOfMultipleMatches = 1; 305 | state = 0; 306 | }; 307 | CD453BA213CAE06B004B5319 /* OnePasswordAction.m:125 */ = { 308 | isa = PBXFileBreakpoint; 309 | actions = ( 310 | ); 311 | breakpointStyle = 0; 312 | continueAfterActions = 0; 313 | countType = 0; 314 | delayBeforeContinue = 0; 315 | fileReference = BBF5817B0B1D9D84003CFF55 /* OnePasswordAction.m */; 316 | functionName = "-viewInOnePwd:"; 317 | hitCount = 0; 318 | ignoreCount = 0; 319 | lineNumber = 125; 320 | modificationTime = 338830911.672057; 321 | originalNumberOfMultipleMatches = 1; 322 | state = 0; 323 | }; 324 | CD95EF971162392800967D3C /* QSDebug.h */ = { 325 | isa = PBXFileReference; 326 | lastKnownFileType = sourcecode.c.h; 327 | name = QSDebug.h; 328 | path = /Applications/Quicksilver.app/Contents/Frameworks/QSCore.framework/Headers/QSDebug.h; 329 | sourceTree = ""; 330 | }; 331 | CD95F00711623A6000967D3C /* PBXTextBookmark */ = { 332 | isa = PBXTextBookmark; 333 | fRef = CD95EF971162392800967D3C /* QSDebug.h */; 334 | name = "QSDebug.h: 11"; 335 | rLen = 0; 336 | rLoc = 175; 337 | rType = 0; 338 | vrLen = 654; 339 | vrLoc = 0; 340 | }; 341 | CD9E5CEB1158DCDF00CCCA80 /* PlistBookmark */ = { 342 | isa = PlistBookmark; 343 | fRef = CD9E5CEC1158DCDF00CCCA80 /* ws.agile.1Password.plist */; 344 | fallbackIsa = PBXBookmark; 345 | isK = 0; 346 | kPath = ( 347 | ); 348 | name = /Users/patrick/Library/Preferences/ws.agile.1Password.plist; 349 | rLen = 0; 350 | rLoc = 9223372036854775808; 351 | }; 352 | CD9E5CEC1158DCDF00CCCA80 /* ws.agile.1Password.plist */ = { 353 | isa = PBXFileReference; 354 | lastKnownFileType = file.bplist; 355 | name = ws.agile.1Password.plist; 356 | path = /Users/patrick/Library/Preferences/ws.agile.1Password.plist; 357 | sourceTree = ""; 358 | }; 359 | CDA8A1AD13F050F400EE351E /* PlistBookmark */ = { 360 | isa = PlistBookmark; 361 | fRef = 8D1AC9730486D14A00FE50C9 /* Info.plist */; 362 | fallbackIsa = PBXBookmark; 363 | isK = 0; 364 | kPath = ( 365 | QSActions, 366 | goAndFill, 367 | actionClass, 368 | ); 369 | name = "/Users/patrick/Developer/Apps/OnePassword/1Password-Plugin/Info.plist"; 370 | rLen = 0; 371 | rLoc = 9223372036854775808; 372 | }; 373 | CDA8A1AE13F050F400EE351E /* PBXTextBookmark */ = { 374 | isa = PBXTextBookmark; 375 | fRef = BBF581830B1D9DC3003CFF55 /* OnePasswordSource.m */; 376 | name = "OnePasswordSource.m: 155"; 377 | rLen = 0; 378 | rLoc = 5343; 379 | rType = 0; 380 | vrLen = 852; 381 | vrLoc = 4925; 382 | }; 383 | CDA8A1AF13F050F400EE351E /* PBXTextBookmark */ = { 384 | isa = PBXTextBookmark; 385 | fRef = BBF581820B1D9DC3003CFF55 /* OnePasswordSource.h */; 386 | name = "OnePasswordSource.h: 24"; 387 | rLen = 0; 388 | rLoc = 944; 389 | rType = 0; 390 | vrLen = 838; 391 | vrLoc = 442; 392 | }; 393 | CDA8A1B113F050F400EE351E /* PBXTextBookmark */ = { 394 | isa = PBXTextBookmark; 395 | fRef = E1EAB047068128A800774DFF /* OnePassword.h */; 396 | name = "OnePassword.h: 18"; 397 | rLen = 0; 398 | rLoc = 655; 399 | rType = 0; 400 | vrLen = 904; 401 | vrLoc = 0; 402 | }; 403 | CDA8A1B213F050F400EE351E /* PBXTextBookmark */ = { 404 | isa = PBXTextBookmark; 405 | fRef = BBF5817B0B1D9D84003CFF55 /* OnePasswordAction.m */; 406 | name = "OnePasswordAction.m: 110"; 407 | rLen = 0; 408 | rLoc = 3687; 409 | rType = 0; 410 | vrLen = 600; 411 | vrLoc = 2730; 412 | }; 413 | CDA8A1DB13F0515A00EE351E /* PBXTextBookmark */ = { 414 | isa = PBXTextBookmark; 415 | fRef = BBF5817A0B1D9D84003CFF55 /* OnePasswordAction.h */; 416 | name = "OnePasswordAction.h: 44"; 417 | rLen = 0; 418 | rLoc = 1570; 419 | rType = 0; 420 | vrLen = 907; 421 | vrLoc = 3; 422 | }; 423 | CDA8A1E613F0553D00EE351E /* PBXTextBookmark */ = { 424 | isa = PBXTextBookmark; 425 | fRef = E1EAB045068128A200774DFF /* OnePassword.m */; 426 | name = "OnePassword.m: 25"; 427 | rLen = 0; 428 | rLoc = 929; 429 | rType = 0; 430 | vrLen = 758; 431 | vrLoc = 207; 432 | }; 433 | CDA8A1F513F055B100EE351E /* PBXTextBookmark */ = { 434 | isa = PBXTextBookmark; 435 | fRef = 32DBCF980370C29C00C91783 /* OnePassword_Prefix.pch */; 436 | name = "OnePassword_Prefix.pch: 13"; 437 | rLen = 0; 438 | rLoc = 259; 439 | rType = 0; 440 | vrLen = 573; 441 | vrLoc = 0; 442 | }; 443 | CDB5BB8B110109170001C0D3 /* Source Control */ = { 444 | isa = PBXSourceControlManager; 445 | fallbackIsa = XCSourceControlManager; 446 | isSCMEnabled = 0; 447 | scmConfiguration = { 448 | repositoryNamesForRoots = { 449 | "" = ""; 450 | }; 451 | }; 452 | }; 453 | CDB5BB8C110109170001C0D3 /* Code sense */ = { 454 | isa = PBXCodeSenseManager; 455 | indexTemplatePath = ""; 456 | }; 457 | CDD8746E113166F7009ED78C /* PBXTextBookmark */ = { 458 | isa = PBXTextBookmark; 459 | fRef = CDD8746F113166F7009ED78C /* NDSDKCompatibility.h */; 460 | name = "NDSDKCompatibility.h: 1"; 461 | rLen = 0; 462 | rLoc = 0; 463 | rType = 0; 464 | vrLen = 705; 465 | vrLoc = 0; 466 | }; 467 | CDD8746F113166F7009ED78C /* NDSDKCompatibility.h */ = { 468 | isa = PBXFileReference; 469 | lastKnownFileType = sourcecode.c.h; 470 | name = NDSDKCompatibility.h; 471 | path = /Applications/Quicksilver.app/Contents/Frameworks/QSFoundation.framework/Headers/NDSDKCompatibility.h; 472 | sourceTree = ""; 473 | }; 474 | CDD87470113166F7009ED78C /* PBXTextBookmark */ = { 475 | isa = PBXTextBookmark; 476 | fRef = CDD87471113166F7009ED78C /* NDHotKeyEvent.h */; 477 | name = "NDHotKeyEvent.h: 21"; 478 | rLen = 1; 479 | rLoc = 1565; 480 | rType = 0; 481 | vrLen = 2222; 482 | vrLoc = 0; 483 | }; 484 | CDD87471113166F7009ED78C /* NDHotKeyEvent.h */ = { 485 | isa = PBXFileReference; 486 | lastKnownFileType = sourcecode.c.h; 487 | name = NDHotKeyEvent.h; 488 | path = /Applications/Quicksilver.app/Contents/Frameworks/QSFoundation.framework/Headers/NDHotKeyEvent.h; 489 | sourceTree = ""; 490 | }; 491 | CDD87473113166F7009ED78C /* NDProcess.h */ = { 492 | isa = PBXFileReference; 493 | lastKnownFileType = sourcecode.c.h; 494 | name = NDProcess.h; 495 | path = /Applications/Quicksilver.app/Contents/Frameworks/QSFoundation.framework/Headers/NDProcess.h; 496 | sourceTree = ""; 497 | }; 498 | CDD8747611316720009ED78C /* PBXTextBookmark */ = { 499 | isa = PBXTextBookmark; 500 | fRef = CDD87473113166F7009ED78C /* NDProcess.h */; 501 | name = "NDProcess.h: 5"; 502 | rLen = 0; 503 | rLoc = 204; 504 | rType = 0; 505 | vrLen = 1268; 506 | vrLoc = 0; 507 | }; 508 | E1EAB045068128A200774DFF /* OnePassword.m */ = { 509 | uiCtxt = { 510 | sepNavIntBoundsRect = "{{0, 0}, {863, 390}}"; 511 | sepNavSelRange = "{929, 0}"; 512 | sepNavVisRange = "{207, 758}"; 513 | sepNavWindowFrame = "{{81, 19}, {1199, 759}}"; 514 | }; 515 | }; 516 | E1EAB047068128A800774DFF /* OnePassword.h */ = { 517 | uiCtxt = { 518 | sepNavIntBoundsRect = "{{0, 0}, {863, 403}}"; 519 | sepNavSelRange = "{655, 0}"; 520 | sepNavVisRange = "{0, 904}"; 521 | sepNavWindowFrame = "{{85, 0}, {1199, 1028}}"; 522 | }; 523 | }; 524 | } 525 | -------------------------------------------------------------------------------- /OnePassword.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 7F35FF4007F9ACD90056051D /* QSCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F35FF3C07F9ACD90056051D /* QSCore.framework */; }; 11 | 7F35FF4207F9ACD90056051D /* QSFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F35FF3E07F9ACD90056051D /* QSFoundation.framework */; }; 12 | 8D1AC9700486D14A00FE50C9 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD92D38A0106425D02CA0E72 /* Cocoa.framework */; }; 13 | BBF5817C0B1D9D84003CFF55 /* OnePasswordAction.m in Sources */ = {isa = PBXBuildFile; fileRef = BBF5817B0B1D9D84003CFF55 /* OnePasswordAction.m */; }; 14 | BBF581840B1D9DC3003CFF55 /* OnePasswordSource.m in Sources */ = {isa = PBXBuildFile; fileRef = BBF581830B1D9DC3003CFF55 /* OnePasswordSource.m */; }; 15 | CD0117CC13CCBDDF00409D70 /* YAJL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD0117CB13CCBDDF00409D70 /* YAJL.framework */; }; 16 | CD0117DA13CCBDEA00409D70 /* YAJL.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = CD0117CB13CCBDDF00409D70 /* YAJL.framework */; }; 17 | CD53B37B19DB19F200795282 /* QSInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7FFA8E9D0816CCCA00A858CD /* QSInterface.framework */; }; 18 | /* End PBXBuildFile section */ 19 | 20 | /* Begin PBXCopyFilesBuildPhase section */ 21 | CD3E957613C5D2B4000BFB0D /* Copy Frameworks */ = { 22 | isa = PBXCopyFilesBuildPhase; 23 | buildActionMask = 2147483647; 24 | dstPath = ""; 25 | dstSubfolderSpec = 10; 26 | files = ( 27 | CD0117DA13CCBDEA00409D70 /* YAJL.framework in Copy Frameworks */, 28 | ); 29 | name = "Copy Frameworks"; 30 | runOnlyForDeploymentPostprocessing = 0; 31 | }; 32 | /* End PBXCopyFilesBuildPhase section */ 33 | 34 | /* Begin PBXFileReference section */ 35 | 32DBCF980370C29C00C91783 /* OnePassword_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OnePassword_Prefix.pch; sourceTree = ""; }; 36 | 7F35FF3C07F9ACD90056051D /* QSCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = QSCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 37 | 7F35FF3E07F9ACD90056051D /* QSFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = QSFoundation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 38 | 7FFA8E9C0816CCCA00A858CD /* QSEffects.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = QSEffects.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 39 | 7FFA8E9D0816CCCA00A858CD /* QSInterface.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = QSInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 40 | 8D1AC9730486D14A00FE50C9 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 41 | 8D1AC9740486D14A00FE50C9 /* OnePassword.qsplugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = OnePassword.qsplugin; sourceTree = BUILT_PRODUCTS_DIR; }; 42 | BBF5817A0B1D9D84003CFF55 /* OnePasswordAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OnePasswordAction.h; sourceTree = ""; }; 43 | BBF5817B0B1D9D84003CFF55 /* OnePasswordAction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OnePasswordAction.m; sourceTree = ""; }; 44 | BBF581820B1D9DC3003CFF55 /* OnePasswordSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OnePasswordSource.h; sourceTree = ""; }; 45 | BBF581830B1D9DC3003CFF55 /* OnePasswordSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OnePasswordSource.m; sourceTree = ""; }; 46 | CD0117CB13CCBDDF00409D70 /* YAJL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = YAJL.framework; sourceTree = ""; }; 47 | CD5013EF14938D1B0022F5E1 /* Common.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Common.xcconfig; sourceTree = ""; }; 48 | CD5013F014938D1B0022F5E1 /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; 49 | CD5013F114938D1B0022F5E1 /* Developer.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Developer.xcconfig; sourceTree = ""; }; 50 | CD5013F214938D1B0022F5E1 /* QSPlugIn.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = QSPlugIn.xcconfig; sourceTree = ""; }; 51 | CD5013F514938D1B0022F5E1 /* Quicksilver.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Quicksilver.pch; sourceTree = ""; }; 52 | CD5013F614938D1B0022F5E1 /* Release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 53 | CDF8E28714928A4F005B1E49 /* OnePasswordDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OnePasswordDefines.h; sourceTree = ""; }; 54 | DD92D38A0106425D02CA0E72 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 55 | /* End PBXFileReference section */ 56 | 57 | /* Begin PBXFrameworksBuildPhase section */ 58 | 8D1AC96E0486D14A00FE50C9 /* Frameworks */ = { 59 | isa = PBXFrameworksBuildPhase; 60 | buildActionMask = 2147483647; 61 | files = ( 62 | 8D1AC9700486D14A00FE50C9 /* Cocoa.framework in Frameworks */, 63 | 7F35FF4007F9ACD90056051D /* QSCore.framework in Frameworks */, 64 | 7F35FF4207F9ACD90056051D /* QSFoundation.framework in Frameworks */, 65 | CD53B37B19DB19F200795282 /* QSInterface.framework in Frameworks */, 66 | CD0117CC13CCBDDF00409D70 /* YAJL.framework in Frameworks */, 67 | ); 68 | runOnlyForDeploymentPostprocessing = 0; 69 | }; 70 | /* End PBXFrameworksBuildPhase section */ 71 | 72 | /* Begin PBXGroup section */ 73 | 0259C574FE90428111CA0C5A /* OnePassword */ = { 74 | isa = PBXGroup; 75 | children = ( 76 | CD5013EE14938D1B0022F5E1 /* Configuration */, 77 | 32DBCF9E0370C38000C91783 /* Classes */, 78 | 32DBCF9F0370C38200C91783 /* Other Sources */, 79 | 0259C582FE90428111CA0C5A /* Resources */, 80 | 1ED78706FE9D4A0611CA0C5A /* Products */, 81 | 2E58F364FFB232C311CA0CBA /* Frameworks */, 82 | ); 83 | name = OnePassword; 84 | sourceTree = ""; 85 | }; 86 | 0259C582FE90428111CA0C5A /* Resources */ = { 87 | isa = PBXGroup; 88 | children = ( 89 | 8D1AC9730486D14A00FE50C9 /* Info.plist */, 90 | ); 91 | name = Resources; 92 | sourceTree = ""; 93 | }; 94 | 1ED78706FE9D4A0611CA0C5A /* Products */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | 8D1AC9740486D14A00FE50C9 /* OnePassword.qsplugin */, 98 | ); 99 | name = Products; 100 | sourceTree = ""; 101 | }; 102 | 2E58F364FFB232C311CA0CBA /* Frameworks */ = { 103 | isa = PBXGroup; 104 | children = ( 105 | CD0117CB13CCBDDF00409D70 /* YAJL.framework */, 106 | DD92D38A0106425D02CA0E72 /* Cocoa.framework */, 107 | 7F35FF3C07F9ACD90056051D /* QSCore.framework */, 108 | 7F35FF3E07F9ACD90056051D /* QSFoundation.framework */, 109 | 7FFA8E9C0816CCCA00A858CD /* QSEffects.framework */, 110 | 7FFA8E9D0816CCCA00A858CD /* QSInterface.framework */, 111 | ); 112 | name = Frameworks; 113 | sourceTree = ""; 114 | }; 115 | 32DBCF9E0370C38000C91783 /* Classes */ = { 116 | isa = PBXGroup; 117 | children = ( 118 | CDF8E28714928A4F005B1E49 /* OnePasswordDefines.h */, 119 | BBF5817A0B1D9D84003CFF55 /* OnePasswordAction.h */, 120 | BBF5817B0B1D9D84003CFF55 /* OnePasswordAction.m */, 121 | BBF581820B1D9DC3003CFF55 /* OnePasswordSource.h */, 122 | BBF581830B1D9DC3003CFF55 /* OnePasswordSource.m */, 123 | ); 124 | name = Classes; 125 | sourceTree = ""; 126 | }; 127 | 32DBCF9F0370C38200C91783 /* Other Sources */ = { 128 | isa = PBXGroup; 129 | children = ( 130 | 32DBCF980370C29C00C91783 /* OnePassword_Prefix.pch */, 131 | ); 132 | name = "Other Sources"; 133 | sourceTree = ""; 134 | }; 135 | CD5013EE14938D1B0022F5E1 /* Configuration */ = { 136 | isa = PBXGroup; 137 | children = ( 138 | CD5013EF14938D1B0022F5E1 /* Common.xcconfig */, 139 | CD5013F014938D1B0022F5E1 /* Debug.xcconfig */, 140 | CD5013F114938D1B0022F5E1 /* Developer.xcconfig */, 141 | CD5013F214938D1B0022F5E1 /* QSPlugIn.xcconfig */, 142 | CD5013F514938D1B0022F5E1 /* Quicksilver.pch */, 143 | CD5013F614938D1B0022F5E1 /* Release.xcconfig */, 144 | ); 145 | name = Configuration; 146 | path = /private/tmp/QS/Configuration; 147 | sourceTree = ""; 148 | }; 149 | /* End PBXGroup section */ 150 | 151 | /* Begin PBXNativeTarget section */ 152 | 8D1AC9600486D14A00FE50C9 /* OnePassword */ = { 153 | isa = PBXNativeTarget; 154 | buildConfigurationList = 7F6B3EEB085CE8DF000735A8 /* Build configuration list for PBXNativeTarget "OnePassword" */; 155 | buildPhases = ( 156 | E1022B2806B3475D00299BEC /* Update Version and Documentation */, 157 | CD3E957613C5D2B4000BFB0D /* Copy Frameworks */, 158 | CD9EB80219DB1BAD0008B37B /* Resources */, 159 | 8D1AC96A0486D14A00FE50C9 /* Sources */, 160 | 8D1AC96E0486D14A00FE50C9 /* Frameworks */, 161 | ); 162 | buildRules = ( 163 | ); 164 | dependencies = ( 165 | ); 166 | name = OnePassword; 167 | productInstallPath = "$(HOME)/Developer/Palettes"; 168 | productName = OnePassword; 169 | productReference = 8D1AC9740486D14A00FE50C9 /* OnePassword.qsplugin */; 170 | productType = "com.apple.product-type.bundle"; 171 | }; 172 | /* End PBXNativeTarget section */ 173 | 174 | /* Begin PBXProject section */ 175 | 0259C573FE90428111CA0C5A /* Project object */ = { 176 | isa = PBXProject; 177 | attributes = { 178 | LastUpgradeCheck = 0450; 179 | ORGANIZATIONNAME = "Patrick Robertson"; 180 | }; 181 | buildConfigurationList = 7F6B3EEF085CE8DF000735A8 /* Build configuration list for PBXProject "OnePassword" */; 182 | compatibilityVersion = "Xcode 3.2"; 183 | developmentRegion = English; 184 | hasScannedForEncodings = 1; 185 | knownRegions = ( 186 | English, 187 | Japanese, 188 | French, 189 | German, 190 | ); 191 | mainGroup = 0259C574FE90428111CA0C5A /* OnePassword */; 192 | projectDirPath = ""; 193 | projectRoot = ""; 194 | targets = ( 195 | 8D1AC9600486D14A00FE50C9 /* OnePassword */, 196 | ); 197 | }; 198 | /* End PBXProject section */ 199 | 200 | /* Begin PBXResourcesBuildPhase section */ 201 | CD9EB80219DB1BAD0008B37B /* Resources */ = { 202 | isa = PBXResourcesBuildPhase; 203 | buildActionMask = 2147483647; 204 | files = ( 205 | ); 206 | runOnlyForDeploymentPostprocessing = 0; 207 | }; 208 | /* End PBXResourcesBuildPhase section */ 209 | 210 | /* Begin PBXShellScriptBuildPhase section */ 211 | E1022B2806B3475D00299BEC /* Update Version and Documentation */ = { 212 | isa = PBXShellScriptBuildPhase; 213 | buildActionMask = 8; 214 | files = ( 215 | ); 216 | inputPaths = ( 217 | ); 218 | name = "Update Version and Documentation"; 219 | outputPaths = ( 220 | ); 221 | runOnlyForDeploymentPostprocessing = 1; 222 | shellPath = /bin/sh; 223 | shellScript = "\"$QS_BUILD_ROOT/Tools/bltrversion\""; 224 | }; 225 | /* End PBXShellScriptBuildPhase section */ 226 | 227 | /* Begin PBXSourcesBuildPhase section */ 228 | 8D1AC96A0486D14A00FE50C9 /* Sources */ = { 229 | isa = PBXSourcesBuildPhase; 230 | buildActionMask = 2147483647; 231 | files = ( 232 | BBF5817C0B1D9D84003CFF55 /* OnePasswordAction.m in Sources */, 233 | BBF581840B1D9DC3003CFF55 /* OnePasswordSource.m in Sources */, 234 | ); 235 | runOnlyForDeploymentPostprocessing = 0; 236 | }; 237 | /* End PBXSourcesBuildPhase section */ 238 | 239 | /* Begin XCBuildConfiguration section */ 240 | 7F6B3EEC085CE8DF000735A8 /* Debug */ = { 241 | isa = XCBuildConfiguration; 242 | baseConfigurationReference = CD5013F214938D1B0022F5E1 /* QSPlugIn.xcconfig */; 243 | buildSettings = { 244 | CLANG_ENABLE_OBJC_ARC = YES; 245 | GCC_PREFIX_HEADER = OnePassword_Prefix.pch; 246 | GCC_PREPROCESSOR_DEFINITIONS = NS_BLOCK_ASSERTIONS; 247 | INFOPLIST_FILE = Info.plist; 248 | OTHER_LDFLAGS = ""; 249 | }; 250 | name = Debug; 251 | }; 252 | 7F6B3EED085CE8DF000735A8 /* Release */ = { 253 | isa = XCBuildConfiguration; 254 | baseConfigurationReference = CD5013F214938D1B0022F5E1 /* QSPlugIn.xcconfig */; 255 | buildSettings = { 256 | CLANG_ENABLE_OBJC_ARC = YES; 257 | GCC_PREFIX_HEADER = OnePassword_Prefix.pch; 258 | GCC_PREPROCESSOR_DEFINITIONS = NS_BLOCK_ASSERTIONS; 259 | INFOPLIST_FILE = Info.plist; 260 | OTHER_LDFLAGS = "-bundle"; 261 | }; 262 | name = Release; 263 | }; 264 | 7F6B3EF0085CE8DF000735A8 /* Debug */ = { 265 | isa = XCBuildConfiguration; 266 | baseConfigurationReference = CD5013F014938D1B0022F5E1 /* Debug.xcconfig */; 267 | buildSettings = { 268 | FRAMEWORK_SEARCH_PATHS = ( 269 | $SRCROOT, 270 | /tmp/QS/build/Release, 271 | ); 272 | GCC_C_LANGUAGE_STANDARD = c99; 273 | LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks"; 274 | }; 275 | name = Debug; 276 | }; 277 | 7F6B3EF1085CE8DF000735A8 /* Release */ = { 278 | isa = XCBuildConfiguration; 279 | baseConfigurationReference = CD5013F614938D1B0022F5E1 /* Release.xcconfig */; 280 | buildSettings = { 281 | FRAMEWORK_SEARCH_PATHS = ( 282 | $SRCROOT, 283 | /tmp/QS/build/Release, 284 | ); 285 | GCC_C_LANGUAGE_STANDARD = c99; 286 | LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks"; 287 | }; 288 | name = Release; 289 | }; 290 | /* End XCBuildConfiguration section */ 291 | 292 | /* Begin XCConfigurationList section */ 293 | 7F6B3EEB085CE8DF000735A8 /* Build configuration list for PBXNativeTarget "OnePassword" */ = { 294 | isa = XCConfigurationList; 295 | buildConfigurations = ( 296 | 7F6B3EEC085CE8DF000735A8 /* Debug */, 297 | 7F6B3EED085CE8DF000735A8 /* Release */, 298 | ); 299 | defaultConfigurationIsVisible = 0; 300 | defaultConfigurationName = Release; 301 | }; 302 | 7F6B3EEF085CE8DF000735A8 /* Build configuration list for PBXProject "OnePassword" */ = { 303 | isa = XCConfigurationList; 304 | buildConfigurations = ( 305 | 7F6B3EF0085CE8DF000735A8 /* Debug */, 306 | 7F6B3EF1085CE8DF000735A8 /* Release */, 307 | ); 308 | defaultConfigurationIsVisible = 0; 309 | defaultConfigurationName = Release; 310 | }; 311 | /* End XCConfigurationList section */ 312 | }; 313 | rootObject = 0259C573FE90428111CA0C5A /* Project object */; 314 | } 315 | -------------------------------------------------------------------------------- /OnePassword.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /OnePassword.xcodeproj/project.xcworkspace/xcuserdata/patrick.xcuserdatad/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildLocationStyle 6 | UseTargetSettings 7 | CustomBuildLocationType 8 | RelativeToDerivedData 9 | DerivedDataLocationStyle 10 | Default 11 | HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges 12 | 13 | IDEWorkspaceUserSettings_HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges 14 | 15 | IDEWorkspaceUserSettings_SnapshotAutomaticallyBeforeSignificantChanges 16 | 17 | IssueFilterStyle 18 | ShowActiveSchemeOnly 19 | LiveSourceIssuesEnabled 20 | 21 | SnapshotAutomaticallyBeforeSignificantChanges 22 | 23 | SnapshotLocationStyle 24 | Default 25 | 26 | 27 | -------------------------------------------------------------------------------- /OnePasswordAction.h: -------------------------------------------------------------------------------- 1 | // 2 | // OnePasswordAction.h 3 | // OnePassword 4 | // 5 | // Created by Patrick Robertson on 15/01/2010. 6 | // Copyright Patrick Roberston 2010. All rights reserved. 7 | // 8 | // This file is part of Quicksilver 1Password Module. 9 | // 10 | // Quicksilver 1Password Module is free software: you can redistribute it and/or modify 11 | // it under the terms of the GNU General Public License as published by 12 | // the Free Software Foundation, either version 3 of the License, or 13 | // (at your option) any later version. 14 | // 15 | // Quicksilver 1Password Module is distributed in the hope that it will be useful, 16 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 | // GNU General Public License for more details. 19 | // 20 | // You should have received a copy of the GNU General Public License 21 | // along with Quicksilver 1Password Module. If not, see . 22 | // 23 | 24 | #import "OnePasswordAction.h" 25 | 26 | @interface OnePasswordAction : QSActionProvider 27 | { 28 | NSString *bundleID; 29 | } 30 | @end 31 | 32 | -------------------------------------------------------------------------------- /OnePasswordAction.m: -------------------------------------------------------------------------------- 1 | // 2 | // OnePasswordAction.m 3 | // OnePassword 4 | // 5 | // Created by Patrick Robertson on 15/01/2010. 6 | // Copyright Patrick Roberston 2010. All rights reserved. 7 | // 8 | // This file is part of Quicksilver 1Password Module. 9 | // 10 | // Quicksilver 1Password Module is free software: you can redistribute it and/or modify 11 | // it under the terms of the GNU General Public License as published by 12 | // the Free Software Foundation, either version 3 of the License, or 13 | // (at your option) any later version. 14 | // 15 | // Quicksilver 1Password Module is distributed in the hope that it will be useful, 16 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 | // GNU General Public License for more details. 19 | // 20 | // You should have received a copy of the GNU General Public License 21 | // along with Quicksilver 1Password Module. If not, see . 22 | // 23 | 24 | 25 | #import "OnePasswordAction.h" 26 | #import "OnePasswordSource.h" 27 | #import "OnePasswordDefines.h" 28 | #import 29 | 30 | NSString *sha256Hash(NSString* input) { 31 | const char* original = [input UTF8String]; 32 | unsigned char result[CC_SHA256_DIGEST_LENGTH]; 33 | CC_SHA256(original, (unsigned int)strlen(original), result); 34 | NSMutableString *sha256hash = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH*2]; 35 | for (int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) { 36 | [sha256hash appendFormat:@"%02x", result[i]]; 37 | } 38 | return sha256hash; 39 | } 40 | 41 | NSURL *openAndFillURL(NSString *targetURL, QSObject *onePasswordItem) { 42 | // onepassword7://open_and_fill/profileUUID/UUID/sha256_of_url 43 | NSString *onePasswordURLFormat = @"onepassword7://open_and_fill/%@/%@/%@"; 44 | NSString *vault = [onePasswordItem objectForMeta:kOnePasswordVaultIdentifier]; 45 | NSString *uuid = [onePasswordItem objectForType:QS1PasswordItemType]; 46 | NSString *stringURL = [NSString stringWithFormat:onePasswordURLFormat, vault, uuid, sha256Hash(targetURL)]; 47 | return [[NSURL alloc] initWithString:stringURL]; 48 | } 49 | 50 | @implementation OnePasswordAction 51 | 52 | - (QSObject *)openAndFill:(QSObject *)dObject 53 | { 54 | // see https://support.1password.com/integration-mac/#open-a-url 55 | QSObject *onePasswordItem = [dObject parent]; 56 | NSString *targetURL = [dObject objectForType:QSURLType]; 57 | if (onePasswordItem && targetURL) { 58 | NSURL *computedURL = openAndFillURL(targetURL, onePasswordItem); 59 | [[NSWorkspace sharedWorkspace] openURL:computedURL]; 60 | } 61 | return nil; 62 | } 63 | @end 64 | -------------------------------------------------------------------------------- /OnePasswordDefines.h: -------------------------------------------------------------------------------- 1 | // Keychain location defines 2 | #define kOldKeychainLocation @"~/Library/Application Support/1Password/1Password.agilekeychain" 3 | #define kNewMASKeychainLocation @"~/Library/Containers/com.agilebits.onepassword-osx-helper/Data/Documents/1Password.agilekeychain" 4 | #define kDropboxLocation @"~/Dropbox/1Password/1Password.agilekeychain" 5 | #define kOldDropboxLocation @"~/Dropbox/1Password.agilekeychain" 6 | 7 | #define kKeychainPathArray [NSArray arrayWithObjects:kOldKeychainLocation,kNewMASKeychainLocation,kDropboxLocation,kOldDropboxLocation,nil] 8 | 9 | // QSObject type defines 10 | #define QS1PasswordItemType @"QS1PasswordItemType" 11 | #define QS1PasswordURLType @"QS1PasswordURLType" // URLs found in Logins 12 | #define kOnePasswordAction @"OnePasswordAction" 13 | #define kOnePasswordItemDetails @"details-1password" 14 | #define kOnePasswordItemURLs @"kOnePasswordItemURLs" 15 | #define kOnePasswordItemCategory @"categoryUUID" 16 | // see https://support.1password.com/integration-mac/#appendix-categories 17 | #define kOnePasswordCategoryLogin @"001" 18 | #define kOnePasswordVaultIdentifier @"vault-1password" 19 | 20 | // Some things from Carbon 21 | #define kASAppleScriptSuite 'ascr' 22 | #define kASSubroutineEvent 'psbr' 23 | #define keyASSubroutineName 'snam' 24 | 25 | // JSON defines 26 | #define kItemType @"type" 27 | 28 | // OnePassword Bundle IDs 29 | #define kNonMASBundleID @"com.agilebits.onepassword4" 30 | #define kMASBundleID @"com.agilebits.onepassword-osx" 31 | #define kVersion7BundleID @"com.agilebits.onepassword7" 32 | #define kOnePasswordBundleIDs @[kVersion7BundleID, kMASBundleID, @"ws.agile.1Password", kNonMASBundleID] 33 | #define kOnePasswordPrefs @[kNonMASBundleID, [[@"~/Library/Containers/com.agilebits.onepassword-osx/Data/Library/Preferences/" stringByStandardizingPath] stringByAppendingPathComponent:kMASBundleID]] 34 | 35 | // Key for storing the keychain path in the prefs 36 | #define k1PPath @"QS1PasswordKeychainPath" 37 | 38 | #define kQS1PasswordIcon @"QS1PasswordIcon" 39 | 40 | #define kMAS1Password3rdPartyFile @"~/Library/Containers/2BUA8C4S2C.com.agilebits.onepassword-osx-helper/Data/Library/3rd Party Integration/bookmarks-default.json" 41 | #define kNonMAS1Password3rdPartyFile @"~/Library/Application Support/1Password 4/3rd Party Integration/bookmarks-default.json" 42 | #define k1Password3rdPartyItemsPath @"~/Library/Containers/com.agilebits.onepassword7/Data/Library/Caches/Metadata/1Password" 43 | -------------------------------------------------------------------------------- /OnePasswordSource.h: -------------------------------------------------------------------------------- 1 | // 2 | // OnePasswordSource.h 3 | // OnePassword 4 | // 5 | // Created by Patrick Robertson on 15/01/2010. 6 | // Copyright Patrick Roberston 2010. All rights reserved. 7 | // 8 | // This file is part of Quicksilver 1Password Module. 9 | // 10 | // Quicksilver 1Password Module is free software: you can redistribute it and/or modify 11 | // it under the terms of the GNU General Public License as published by 12 | // the Free Software Foundation, either version 3 of the License, or 13 | // (at your option) any later version. 14 | // 15 | // Quicksilver 1Password Module is distributed in the hope that it will be useful, 16 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 | // GNU General Public License for more details. 19 | // 20 | // You should have received a copy of the GNU General Public License 21 | // along with Quicksilver 1Password Module. If not, see . 22 | // 23 | 24 | 25 | @interface OnePasswordSource : QSObjectSource 26 | 27 | @property (retain) NSString *bundleID; 28 | + (id)sharedInstance; 29 | 30 | @end 31 | 32 | -------------------------------------------------------------------------------- /OnePasswordSource.m: -------------------------------------------------------------------------------- 1 | 2 | // 3 | // OnePasswordSource.m 4 | // OnePassword 5 | // 6 | // Created by Patrick Robertson on 15/01/2010. 7 | // Copyright Patrick Roberston 2010. All rights reserved. 8 | // 9 | // This file is part of Quicksilver 1Password Module. 10 | // 11 | // Quicksilver 1Password Module is free software: you can redistribute it and/or modify 12 | // it under the terms of the GNU General Public License as published by 13 | // the Free Software Foundation, either version 3 of the License, or 14 | // (at your option) any later version. 15 | // 16 | // Quicksilver 1Password Module is distributed in the hope that it will be useful, 17 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | // GNU General Public License for more details. 20 | // 21 | // You should have received a copy of the GNU General Public License 22 | // along with Quicksilver 1Password Module. If not, see . 23 | // 24 | 25 | // See https://support.1password.com/integration-mac/ 26 | 27 | #import "OnePasswordSource.h" 28 | #import "OnePasswordDefines.h" 29 | #import 30 | 31 | QSObject *onePasswordURLObject(NSString *itemURL, QSObject *parentObject) { 32 | NSString *ident = [NSString stringWithFormat:@"1PasswordURL:%@", itemURL]; 33 | NSString *name = [NSString stringWithFormat:@"Website for %@", [parentObject displayName]]; 34 | QSObject *newObject = [QSObject makeObjectWithIdentifier:ident]; 35 | [newObject setName:name]; 36 | [newObject setDetails:itemURL]; 37 | [newObject setObject:itemURL forType:QSURLType]; 38 | [newObject setObject:itemURL forType:QS1PasswordURLType]; 39 | [newObject setPrimaryType:QS1PasswordURLType]; 40 | [newObject setParentID:[parentObject identifier]]; 41 | return newObject; 42 | } 43 | 44 | @implementation OnePasswordSource 45 | 46 | - (void)dealloc 47 | { 48 | self.bundleID = nil; 49 | } 50 | 51 | static id _sharedInstance; 52 | 53 | + (id)sharedInstance { 54 | if (!_sharedInstance) _sharedInstance = [[[self class] alloc] init]; 55 | return _sharedInstance; 56 | } 57 | 58 | -(id)init { 59 | if (self = [super init]) { 60 | self.bundleID = kVersion7BundleID; 61 | // QSDefaults probably won't be read until after this, so maybe pointless 62 | NSString *location = [k1Password3rdPartyItemsPath stringByStandardizingPath]; 63 | NSFileManager *fm = [[NSFileManager alloc] init]; 64 | // valid location exists 65 | BOOL valid = location && [fm fileExistsAtPath:location]; 66 | if (!valid) { 67 | NSImage *icon = [QSResourceManager imageNamed:kQS1PasswordIcon]; 68 | QSShowNotifierWithAttributes(@{ 69 | QSNotifierType: @"OnePasswordNotifType", 70 | QSNotifierIcon: icon ? icon : [QSResourceManager imageNamed:@"com.blacktree.Quicksilver"], 71 | QSNotifierTitle : @"Unable to locate 1Password items", 72 | QSNotifierText : @"Please enable 3rd Party integration in 1Password to use the 1Password Plugin" 73 | }); 74 | } 75 | } 76 | return self; 77 | } 78 | 79 | - (NSString *)keychainPath { 80 | return [k1Password3rdPartyItemsPath stringByStandardizingPath]; 81 | } 82 | 83 | - (BOOL)indexIsValidFromDate:(NSDate *)indexDate forEntry:(NSDictionary *)theEntry{ 84 | 85 | // Check to see if keychain has been modified since last scan 86 | 87 | NSError *error = nil; 88 | NSFileManager *fm = [[NSFileManager alloc] init]; 89 | NSDate *modDate=[[fm attributesOfItemAtPath:[self keychainPath] error:&error] fileModificationDate]; 90 | 91 | if (error) { 92 | NSLog(@"Error: %@", error); 93 | return NO; 94 | } 95 | 96 | // return the difference between the keychain mod date and the last index time 97 | return ([modDate compare:indexDate]==NSOrderedAscending); 98 | } 99 | 100 | - (NSString *)detailsOfObject:(QSObject *)object 101 | { 102 | if ([[object primaryType] isEqualToString:QS1PasswordItemType]) { 103 | return [object objectForMeta:kOnePasswordItemDetails]; 104 | } 105 | return nil; 106 | } 107 | 108 | - (BOOL)objectHasChildren:(QSObject *)object 109 | { 110 | if ([[object primaryType] isEqualToString:QS1PasswordItemType]) { 111 | if ([[object objectForMeta:kOnePasswordItemURLs] count]) { 112 | return YES; 113 | } 114 | } 115 | return NO; 116 | } 117 | 118 | - (BOOL)loadChildrenForObject:(QSObject *)object 119 | { 120 | if ([[object primaryType] isEqualToString:QS1PasswordItemType]) { 121 | NSArray *URLs = [object objectForMeta:kOnePasswordItemURLs]; 122 | NSMutableArray *urlObjects = [NSMutableArray arrayWithCapacity:[URLs count]]; 123 | QSObject *newObject; 124 | NSString *name; 125 | NSInteger URLCount = 1; 126 | for (NSString *itemURL in URLs) { 127 | newObject = onePasswordURLObject(itemURL, object); 128 | if (URLCount > 1) { 129 | name = [NSString stringWithFormat:@"Website %lu for %@", (long)URLCount, [object displayName]]; 130 | [newObject setName:name]; 131 | } 132 | [urlObjects addObject:newObject]; 133 | URLCount += 1; 134 | } 135 | [object setChildren:urlObjects]; 136 | } else { 137 | // For the children to 1Pwd, just load items from the catalog 138 | NSMutableArray *children = [[QSLib scoredArrayForType:QS1PasswordItemType] mutableCopy]; 139 | [object setChildren:children]; 140 | } 141 | return YES; 142 | } 143 | 144 | - (NSArray *)objectsForEntry:(QSCatalogEntry *)theEntry 145 | { 146 | NSDictionary *settings = [theEntry sourceSettings]; 147 | NSString *scanCategory = [settings objectForKey:kOnePasswordItemCategory]; 148 | // Define the objects (Empty to start with) we're going to send back to QS 149 | NSMutableArray *objects = [NSMutableArray array]; 150 | QSObject *newObject; 151 | NSString *location = [self keychainPath]; 152 | NSSet *searchLocations = [NSSet setWithObject:location]; 153 | NSMetadataQuery *passwordSearch = [[NSMetadataQuery alloc] init]; 154 | NSArray *OPItems = [passwordSearch resultsForSearchString:@"kMDItemContentType == 'com.agilebits.itemmetadata'" inFolders:searchLocations]; 155 | for (NSMetadataItem *item in OPItems) { 156 | NSDictionary *metadata = [item valuesForAttributes:@[(NSString *)kMDItemPath]]; 157 | NSString *itemPath = metadata[(NSString *)kMDItemPath]; 158 | NSData *JSONData = [NSData dataWithContentsOfFile:itemPath]; 159 | NSDictionary *OPItem = [JSONData yajl_JSON]; 160 | NSString *category = OPItem[kOnePasswordItemCategory]; 161 | if (![category isEqualToString:scanCategory]) { 162 | continue; 163 | } 164 | NSString *uuid = OPItem[@"uuid"]; 165 | NSString *title = OPItem[@"itemTitle"]; 166 | NSArray *urls = OPItem[@"websiteURLs"]; 167 | NSString *details = OPItem[@"itemDescription"]; 168 | NSString *vault = OPItem[@"profileUUID"]; 169 | newObject = [QSObject makeObjectWithIdentifier:[NSString stringWithFormat:@"1PasswordItem:%@", uuid]]; 170 | [newObject setName:title]; 171 | [newObject setObject:itemPath forType:QSFilePathType]; 172 | [newObject setObject:category forMeta:kOnePasswordItemCategory]; 173 | [newObject setObject:details forMeta:kOnePasswordItemDetails]; 174 | [newObject setObject:vault forMeta:kOnePasswordVaultIdentifier]; 175 | if (urls) { 176 | NSString *firstURL = urls[0]; 177 | [newObject setObject:firstURL forType:QSURLType]; 178 | [newObject setObject:urls forMeta:kOnePasswordItemURLs]; 179 | } 180 | [newObject setObject:uuid forType:QS1PasswordItemType]; 181 | [newObject setPrimaryType:QS1PasswordItemType]; 182 | [newObject setIcon:[QSResourceManager imageNamed:self.bundleID]]; 183 | [objects addObject:newObject]; 184 | } 185 | return objects; 186 | } 187 | 188 | // Object Handler Methods 189 | // An icon that is either already in memory or easy to load 190 | - (void)setQuickIconForObject:(QSObject *)object{ 191 | if ([[object primaryType] isEqualToString:QS1PasswordItemType]) 192 | { 193 | [object setIcon:[QSResourceManager imageNamed:self.bundleID]]; 194 | } 195 | } 196 | @end 197 | -------------------------------------------------------------------------------- /OnePassword_Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'OnePassword' target in the 'OnePassword' project 3 | // 4 | 5 | #ifdef __OBJC__ 6 | #import 7 | #import 8 | #import 9 | #endif 10 | 11 | 12 | #define kOnePasswordType @"OnePasswordType" 13 | 14 | #ifdef DEVEL 15 | # define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); 16 | #else 17 | # define DLog(...) 18 | #endif 19 | 20 | // ALog always displays output regardless of the DEBUG setting 21 | #define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); -------------------------------------------------------------------------------- /README.markdown: -------------------------------------------------------------------------------- 1 | # 1Password 3 Plugin
 2 | 3 | ## What does it do? 4 | 5 | This plugin enables you to right arrow into the 1Password application, giving you a list of all your data saved in 1Password. 6 | 7 | Requirements: **Mac OS X Leopard or higher (10.5+)**, **1Password 3+** and **Quicksilver ß60+**. 8 | 9 | You can download the latest version from the [Plugins preference pane in Quicksilver](http://qs.qsapp.com/plugins) 10 | 11 | ### Actions 12 | 13 | The plugin enables 2 actions for 1Password objects. 14 | 15 | The 'Go & Fill' action will work just like the Go & Fill command from within 1Password; it will launch your default browser and automatically log you in. 16 | 17 | The 'Go & Fill With...' action enabled you to open logins in your non-default browser(s). 18 | 19 | Both the 'Go & Fill' and 'Go & Fill With...' actions work with the comma trick, so you can open multiple logins at once, or open logins in multiple browsers. 20 | 21 | ![Go And Fill... Action](http://i42.tinypic.com/i35lig.jpg "Go And Fill... Action") 22 | 23 | -------- 24 | 25 | Previously, the plugin also added the following action to Quicksilver, but it no longer works with recent versions of 1Password. 26 | 27 | The final action, which works on all 1Password objects is 'Reveal in 1Password'. This action will launch 1Password and bring the selected login item to the front for you to view/edit it. 28 | 29 | ![Open in 1Password Action](http://i42.tinypic.com/wk62qd.jpg "Open in 1Password Action") 30 | 31 | 32 | ### Adding to the Catalog 33 | 34 | To save you from having to search for 1Password in the first pane then right arrowing into it, you can **tick** any of the 1Password data types (logins, identities, secure notes etc.) in the Quicksilver Catalog Preferences Pane (under Modules). This will mean that the 1Password types enabled will be searchable directly from the first pane in Quicksilver. This feature is disabled by default. 35 | 36 | ![1Password Catalog Source](http://i.imgur.com/RDRP7.jpg "1Password Catalog Source") 37 | 38 | ----------- 39 | 40 | ## Getting Started 41 | 42 | First, make sure you're using the **Agile Keychain** or **opvault** keychain. You will also need to go into the 1Password settings and click 'Advanced' then 'Enable 3rd party app integrations'. 43 | 44 | You may need to rescan manually to start with to get your logins to show up. 45 | If the plugin doesn't seem to work, try re-downloading and installing it. Quicksilver will pop up a message saying 'Install Complete'. 46 | Click 'Relaunch' and it should hopefully fix any of your problems. 47 | 48 | ![Relaunch Dialog](http://i43.tinypic.com/35bi0es.jpg "Relaunch Dialog") 49 | 50 | ## Thanks 51 | 52 | Thanks goes to Rob McBroom for his excellent work on writing documentation detailing [QS Plugin Development]((http://github.com/tiennou/blacktree-elements/blob/master/PluginDevelopmentReference/QuicksilverPlug-inReference.mdown)http://projects.skurfer.com/QuicksilverPlug-inReference.mdown). 53 | Thanks also to Jamie of the 1Password development team for his [excellent advice](http://support.agilewebsolutions.com/showthread.php?21959-Developing-a-Quicksilver-Plugin-for-1Password) and insights into how 1Password works. 54 | 55 | ## Changelog 56 | 57 | ### 2.0.0 58 | **Plugin overhaul and tidy up** 59 | 60 | * Now Quicksilver versions ß60+ only 61 | * Fixed object identifiers. Can now set abbreviations and increase/decrease score for 1Password objects 62 | * Added new 'Go and Fill With...' action to allow you to log in with different browsers 63 | * Many memory leak fixes 64 | * More robust error logging 65 | * Fixed a fatal crash that could be caused with multiple 1Password entries with the same name 66 | * Changed to YAJL for JSON parsing. Maintains 10.5 support and faster than SBJSON 67 | * Code optimisations and reduction of duplicate code 68 | * More efficient storing of data in QSObjects 69 | * Source code tidy up and fixed references in .xcodeproj 70 | * Other small bug fixes 71 | 72 | ### 1.2 73 | **Interface clean up. Things look much better :)** 74 | 75 | * Cleaned up the interface. The plugin now displays the names of Web Forms, and it's these names that are searchable. This greatly cleans the UI. 76 | * Fixed a bug that would cause Quicksilver to hang (re-cataloguing everything) when trying to right arrow into a 1Password Object in Quicksilver. 77 | 78 | ### 1.0 79 | **Reached the 1.0 milestone!** 80 | 81 | * Fixed a bug that had cropped into the 0.9 release stopping some users from indexing their 1Password entries 82 | 83 | ### 0.9 84 | **This is quite a major update to the 1Password Plugin!** 85 | 86 | * Added alternate action to go and fill - hold CMD to 'reveal in 1Pwd' 87 | * Action 'Open in 1Password' renamed to 'Reveal in 1Password' - more Mac like 88 | * Added scanning of identities, accounts, software and secure notes 89 | * Added separate entries in the catalog preference pane to chose which sources to scan 90 | * Better crash resilience - won't crash if there's a problem finding the keychain or indexing the catalog 91 | * Fixed a (fairly) bug for users when their keychain was in the default ~/Library/Application Support/1Password folder 92 | * Added nice new icons for each type of 1Password data 93 | 94 | ### 0.8 95 | * Fixed bug when 'Opening in 1Password' after having searched using the 1Password search field 96 | 97 | ### 0.7 98 | * Changed the precedence of the Actions 99 | 100 | ### 0.6 101 | * Fixed another applescript problem by using Apple's NSApplescript approach as opposed to Alcor's 102 | * *Hopefully* fixed most people's bugs 103 | 104 | ### 0.5 105 | * Fixed problem where keychain location wasn't being picked up properly for some due to the '~' (tilde) in the file name 106 | 107 | ### 0.4 108 | * Updated to JSON framework 2.2.3 (Released: 07/03/10) 109 | * Set project to build JSON framework from scratch to avoid linking problems 110 | 111 | ### 0.3 112 | * Fixed: 'Open in 1Password' action for some (make sure using latest QS β58+) 113 | 114 | ### 0.2 115 | * Added 'Open in 1Password' action 116 | 117 | ### 0.1 118 | * Initial Release 119 | -------------------------------------------------------------------------------- /YAJL.framework/Headers: -------------------------------------------------------------------------------- 1 | Versions/Current/Headers -------------------------------------------------------------------------------- /YAJL.framework/Resources: -------------------------------------------------------------------------------- 1 | Versions/Current/Resources -------------------------------------------------------------------------------- /YAJL.framework/Versions/A/Headers/NSBundle+YAJL.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSBundle+YAJL.h 3 | // YAJL 4 | // 5 | // Created by Gabriel Handford on 7/23/09. 6 | // Copyright 2009. All rights reserved. 7 | // 8 | // Permission is hereby granted, free of charge, to any person 9 | // obtaining a copy of this software and associated documentation 10 | // files (the "Software"), to deal in the Software without 11 | // restriction, including without limitation the rights to use, 12 | // copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the 14 | // Software is furnished to do so, subject to the following 15 | // conditions: 16 | // 17 | // The above copyright notice and this permission notice shall be 18 | // included in all copies or substantial portions of the Software. 19 | // 20 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21 | // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 22 | // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 23 | // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 24 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 25 | // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 26 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 27 | // OTHER DEALINGS IN THE SOFTWARE. 28 | // 29 | 30 | #import "YAJLParser.h" 31 | 32 | /*! 33 | Utilities for loading JSON from resource bundles. 34 | 35 | @code 36 | id JSONValue = [[NSBundle mainBundle] yajl_JSONFromResource:@"kegs.json"]; 37 | @endcode 38 | */ 39 | @interface NSBundle(YAJL) 40 | 41 | /*! 42 | Load JSON from bundle. 43 | @param resource Resource name with extension, for example, file.json 44 | @throws YAJLParserException On parse error 45 | */ 46 | - (id)yajl_JSONFromResource:(NSString *)resource; 47 | 48 | /*! 49 | Load JSON from bundle. 50 | @param resource Resource name with extension, for example, file.json 51 | @param options Parser options 52 | - YAJLParserOptionsNone: No options 53 | - YAJLParserOptionsAllowComments: Javascript style comments will be allowed in the input (both /&asterisk; &asterisk;/ and //) 54 | - YAJLParserOptionsCheckUTF8: Invalid UTF8 strings will cause a parse error 55 | - YAJLParserOptionsStrictPrecision: If YES will force strict precision and return integer overflow error 56 | 57 | @param error Out error 58 | @result JSON value (NSArray, NSDictionary) or nil if errored 59 | */ 60 | - (id)yajl_JSONFromResource:(NSString *)resource options:(YAJLParserOptions)options error:(NSError **)error; 61 | 62 | @end 63 | -------------------------------------------------------------------------------- /YAJL.framework/Versions/A/Headers/NSObject+YAJL.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+YAJL.h 3 | // YAJL 4 | // 5 | // Created by Gabriel Handford on 7/23/09. 6 | // Copyright 2009. All rights reserved. 7 | // 8 | // Permission is hereby granted, free of charge, to any person 9 | // obtaining a copy of this software and associated documentation 10 | // files (the "Software"), to deal in the Software without 11 | // restriction, including without limitation the rights to use, 12 | // copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the 14 | // Software is furnished to do so, subject to the following 15 | // conditions: 16 | // 17 | // The above copyright notice and this permission notice shall be 18 | // included in all copies or substantial portions of the Software. 19 | // 20 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21 | // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 22 | // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 23 | // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 24 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 25 | // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 26 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 27 | // OTHER DEALINGS IN THE SOFTWARE. 28 | // 29 | 30 | #import "YAJLGen.h" 31 | #import "YAJLParser.h" 32 | 33 | /*! 34 | Generate JSON string from NSArray, NSDictionary or custom object or parse JSON from NSString or custom object. 35 | 36 | Parse JSON: 37 | @code 38 | NSData *JSONData = [NSData dataWithContentsOfFile:@"example.json"]; 39 | NSArray *arrayFromData = [JSONData yajl_JSON]; 40 | 41 | NSString *JSONString = @"[\"Test\"]"; 42 | NSArray *arrayFromString = [JSONString yajl_JSON]; 43 | 44 | // With options and out error 45 | NSError *error = nil; 46 | NSArray *arrayFromString = [JSONString yajl_JSONWithOptions:YAJLParserOptionsAllowComments error:&error]; 47 | @endcode 48 | 49 | Generate JSON: 50 | @code 51 | NSDictionary *dict = [NSDictionary dictionaryWithObject:@"value" forKey:@"key"]; 52 | NSString *JSONString = [dict yajl_JSONString]; 53 | 54 | // Beautified with custon indent string 55 | NSArray *array = [NSArray arrayWithObjects:@"value1", @"value2", nil]; 56 | NSString *JSONString = [dict yajl_JSONStringWithOptions:YAJLGenOptionsBeautify indentString:@" "]; 57 | @endcode 58 | */ 59 | @interface NSObject(YAJL) 60 | 61 | #pragma mark Gen 62 | 63 | /*! 64 | Create JSON string from object. 65 | Supported objects include: NSArray, NSDictionary, NSNumber, NSString, NSNull 66 | To override JSON value to encode (or support custom objects), implement (id)JSON; See YAJLCoding in YAJLGen.h 67 | @throws YAJLGenInvalidObjectException If object is invalid 68 | @result JSON String 69 | */ 70 | - (NSString *)yajl_JSONString; 71 | 72 | /*! 73 | Create JSON string from object. 74 | Supported objects include: NSArray, NSDictionary, NSNumber, NSString, NSNull 75 | To override JSON value to encode (or support custom objects), implement (id)JSON; See YAJLCoding in YAJLGen.h 76 | @throws YAJLGenInvalidObjectException If object is invalid 77 | @param options 78 | - YAJLGenOptionsNone: No options 79 | - YAJLGenOptionsBeautify: Beautifiy JSON output 80 | - YAJLGenOptionsIgnoreUnknownTypes: Ignore unknown types (will use null value) 81 | - YAJLGenOptionsIncludeUnsupportedTypes: Handle non-JSON types (including NSDate, NSData, NSURL) 82 | 83 | @param indentString 84 | @result JSON String 85 | */ 86 | - (NSString *)yajl_JSONStringWithOptions:(YAJLGenOptions)options indentString:(NSString *)indentString; 87 | 88 | 89 | #pragma mark Parsing 90 | 91 | /*! 92 | Parse JSON (NSString or NSData or dataUsingEncoding:). 93 | @result JSON object 94 | @throws YAJLParserException If a parse error occured 95 | @throws YAJLParsingUnsupportedException If not NSData or doesn't respond to dataUsingEncoding: 96 | 97 | @code 98 | NSString *JSONString = @"{'foo':['bar', true]}"; 99 | id JSONValue = [JSONString yajl_JSON]; 100 | 101 | NSData *JSONData = ...; 102 | id JSONValue = [JSONData yajl_JSON]; 103 | @endcode 104 | */ 105 | - (id)yajl_JSON; 106 | 107 | /*! 108 | Parse JSON (NSString or NSData or dataUsingEncoding:) with out error. 109 | 110 | If an error occurs, the returned object will be the current state of the object when 111 | the error occurred. 112 | 113 | @param error Error to set if we failed to parse 114 | @result JSON object 115 | @throws YAJLParserException If a parse error occured 116 | @throws YAJLParsingUnsupportedException If not NSData or doesn't respond to dataUsingEncoding: 117 | 118 | @code 119 | NSString *JSONString = @"{'foo':['bar', true]}"; 120 | NSError *error = nil; 121 | [JSONString yajl_JSON:error]; 122 | if (error) ...; 123 | @endcode 124 | */ 125 | - (id)yajl_JSON:(NSError **)error; 126 | 127 | /*! 128 | Parse JSON (NSString or NSData or dataUsingEncoding:) with options and out error. 129 | 130 | If an error occurs, the returned object will be the current state of the object when 131 | the error occurred. 132 | 133 | @param options Parse options 134 | - YAJLParserOptionsNone: No options 135 | - YAJLParserOptionsAllowComments: Javascript style comments will be allowed in the input (both /&asterisk; &asterisk;/ and //) 136 | - YAJLParserOptionsCheckUTF8: Invalid UTF8 strings will cause a parse error 137 | - YAJLParserOptionsStrictPrecision: If YES will force strict precision and return integer overflow error 138 | 139 | @param error Error to set if we failed to parse 140 | @result JSON object 141 | @throws YAJLParserException If a parse error occured 142 | @throws YAJLParsingUnsupportedException If not NSData or doesn't respond to dataUsingEncoding: 143 | 144 | @code 145 | NSString *JSONString = @"{'foo':['bar', true]} // comment"; 146 | NSError *error = nil; 147 | [JSONString yajl_JSONWithOptions:YAJLParserOptionsAllowComments error:error]; 148 | if (error) ...; 149 | @endcode 150 | */ 151 | - (id)yajl_JSONWithOptions:(YAJLParserOptions)options error:(NSError **)error; 152 | 153 | @end 154 | 155 | -------------------------------------------------------------------------------- /YAJL.framework/Versions/A/Headers/YAJL.h: -------------------------------------------------------------------------------- 1 | // 2 | // YAJL.h 3 | // YAJL 4 | // 5 | // Created by Gabriel Handford on 7/23/09. 6 | // Copyright 2009. All rights reserved. 7 | // 8 | // Permission is hereby granted, free of charge, to any person 9 | // obtaining a copy of this software and associated documentation 10 | // files (the "Software"), to deal in the Software without 11 | // restriction, including without limitation the rights to use, 12 | // copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the 14 | // Software is furnished to do so, subject to the following 15 | // conditions: 16 | // 17 | // The above copyright notice and this permission notice shall be 18 | // included in all copies or substantial portions of the Software. 19 | // 20 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21 | // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 22 | // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 23 | // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 24 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 25 | // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 26 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 27 | // OTHER DEALINGS IN THE SOFTWARE. 28 | // 29 | 30 | #import "YAJLParser.h" 31 | #import "YAJLDocument.h" 32 | #import "YAJLGen.h" 33 | #import "NSObject+YAJL.h" 34 | #import "NSBundle+YAJL.h" 35 | 36 | /*! 37 | @mainpage YAJL 38 | 39 | The YAJL framework is an Objective-C wrapper around the http://lloyd.github.com/yajl/ SAX-style JSON parser. 40 | 41 | @section Links 42 | 43 | Source: http://github.com/gabriel/yajl-objc 44 | 45 | View docs online: http://gabriel.github.com/yajl-objc/ 46 | 47 | YAJL C docs: http://lloyd.github.com/yajl/ 48 | 49 | @section Usage Usage 50 | 51 | To use the framework (for Mac OS X or iOS): 52 | 53 | @code 54 | // For Mac OS X 55 | #import 56 | // For iOS 57 | #import 58 | @endcode 59 | 60 | @section Examples Examples 61 | 62 | @subsection Example1 To parse JSON from NSData 63 | 64 | @code 65 | NSData *JSONData = [NSData dataWithContentsOfFile:@"example.json"]; 66 | NSArray *arrayFromData = [JSONData yajl_JSON]; 67 | @endcode 68 | 69 | @subsection Example2 To parse JSON from NSString 70 | 71 | @code 72 | NSString *JSONString = @"[1, 2, 3]"; 73 | NSArray *arrayFromString = [JSONString yajl_JSON]; 74 | @endcode 75 | 76 | @subsection Example2 To parse JSON from NSString with error and comments 77 | 78 | @code 79 | // With options and out error 80 | NSString *JSONString = @"[1, 2, 3] // Allow comments"; 81 | NSError *error = nil; 82 | NSArray *arrayFromString = [JSONString yajl_JSONWithOptions:YAJLParserOptionsAllowComments error:&error]; 83 | @endcode 84 | 85 | @subsection Example3 To generate JSON from an object, NSArray, NSDictionary, etc. 86 | 87 | @code 88 | NSDictionary *dict = [NSDictionary dictionaryWithObject:@"value" forKey:@"key"]; 89 | NSString *JSONString = [dict yajl_JSONString]; 90 | @endcode 91 | 92 | @subsection Example4 To generate JSON from an object, beautified with custom indent 93 | 94 | @code 95 | // Beautified with custon indent string 96 | NSArray *array = [NSArray arrayWithObjects:@"value1", @"value2", nil]; 97 | NSString *JSONString = [dict yajl_JSONStringWithOptions:YAJLGenOptionsBeautify indentString:@" "]; 98 | @endcode 99 | 100 | @subsection Example5 To use the streaming (or SAX style) parser, use YAJLParser 101 | 102 | @code 103 | NSData *data = [NSData dataWithContentsOfFile:@"example.json"]; 104 | 105 | YAJLParser *parser = [[YAJLParser alloc] initWithParserOptions:YAJLParserOptionsAllowComments]; 106 | parser.delegate = self; 107 | [parser parse:data]; 108 | if (parser.parserError) 109 | NSLog(@"Error:\n%@", parser.parserError); 110 | 111 | parser.delegate = nil; 112 | [parser release]; 113 | 114 | // Include delegate methods from YAJLParserDelegate 115 | - (void)parserDidStartDictionary:(YAJLParser *)parser { } 116 | - (void)parserDidEndDictionary:(YAJLParser *)parser { } 117 | 118 | - (void)parserDidStartArray:(YAJLParser *)parser { } 119 | - (void)parserDidEndArray:(YAJLParser *)parser { } 120 | 121 | - (void)parser:(YAJLParser *)parser didMapKey:(NSString *)key { } 122 | - (void)parser:(YAJLParser *)parser didAdd:(id)value { } 123 | @endcode 124 | 125 | @subsection ParserOptions Parser Options 126 | 127 | There are options when parsing that can be specified with YAJLParser#initWithParserOptions:. 128 | 129 | - YAJLParserOptionsAllowComments: Allows comments in JSON 130 | - YAJLParserOptionsCheckUTF8: Will verify UTF-8 131 | - YAJLParserOptionsStrictPrecision: Will force strict precision and return integer overflow error, if number is greater than long long. 132 | 133 | @subsection Example6 Parsing as data becomes available 134 | 135 | @code 136 | YAJLParser *parser = [[[YAJLParser alloc] init] autorelease]; 137 | parser.delegate = self; 138 | 139 | // A chunk of data comes... 140 | YAJLParserStatus status = [parser parse:chunk1]; 141 | // 'status' should be YAJLParserStatusInsufficientData, if its not finished 142 | if (parser.parserError) 143 | NSLog(@"Error:\n%@", parser.parserError); 144 | 145 | // Another chunk of data comes... 146 | YAJLParserStatus status = [parser parse:chunk2]; 147 | // 'status' should be YAJLParserStatusOK if its finished 148 | if (parser.parserError) 149 | NSLog(@"Error:\n%@", parser.parserError); 150 | @endcode 151 | 152 | @subsection Example7 Document style parsing 153 | 154 | To use the document style, use YAJLDocument. Usage should be very similar to NSXMLDocument. 155 | 156 | @code 157 | NSData *data = [NSData dataWithContentsOfFile:@"example.json"]; 158 | NSError *error = nil; 159 | YAJLDocument *document = [[YAJLDocument alloc] initWithData:data parserOptions:YAJLParserOptionsNone error:&error]; 160 | // Access root element at document.root 161 | NSLog(@"Root: %@", document.root); 162 | [document release]; 163 | @endcode 164 | 165 | @subsection Example8 Document style parsing as data becomes available 166 | 167 | @code 168 | YAJLDocument *document = [[YAJLDocument alloc] init]; 169 | document.delegate = self; 170 | 171 | NSError *error = nil; 172 | [document parse:chunk1 error:error]; 173 | [document parse:chunk2 error:error]; 174 | 175 | // You can access root element at document.root 176 | NSLog(@"Root: %@", document.root); 177 | [document release]; 178 | 179 | // Or via the YAJLDocumentDelegate delegate methods 180 | 181 | - (void)document:(YAJLDocument *)document didAddDictionary:(NSDictionary *)dict { } 182 | - (void)document:(YAJLDocument *)document didAddArray:(NSArray *)array { } 183 | - (void)document:(YAJLDocument *)document didAddObject:(id)object toArray:(NSArray *)array { } 184 | - (void)document:(YAJLDocument *)document didSetObject:(id)object forKey:(id)key inDictionary:(NSDictionary *)dict { } 185 | @endcode 186 | 187 | @subsection Example9 Load JSON from Bundle 188 | 189 | @code 190 | id JSONValue = [[NSBundle mainBundle] yajl_JSONFromResource:@"kegs.json"]; 191 | @endcode 192 | 193 | @section CustomizedEncoding Customized Encoding 194 | 195 | To implement JSON encodable value for custom objects or override for existing objects, implement - (id)JSON; 196 | 197 | For example: 198 | 199 | @code 200 | @interface CustomObject : NSObject 201 | @end 202 | 203 | @implementation CustomObject 204 | 205 | - (id)JSON { 206 | return [NSArray arrayWithObject:[NSNumber numberWithInteger:1]]; 207 | } 208 | 209 | @end 210 | @endcode 211 | 212 | */ -------------------------------------------------------------------------------- /YAJL.framework/Versions/A/Headers/YAJLDocument.h: -------------------------------------------------------------------------------- 1 | // 2 | // YAJLDecoder.h 3 | // YAJL 4 | // 5 | // Created by Gabriel Handford on 3/1/09. 6 | // Copyright 2009. All rights reserved. 7 | // 8 | // Permission is hereby granted, free of charge, to any person 9 | // obtaining a copy of this software and associated documentation 10 | // files (the "Software"), to deal in the Software without 11 | // restriction, including without limitation the rights to use, 12 | // copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the 14 | // Software is furnished to do so, subject to the following 15 | // conditions: 16 | // 17 | // The above copyright notice and this permission notice shall be 18 | // included in all copies or substantial portions of the Software. 19 | // 20 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21 | // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 22 | // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 23 | // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 24 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 25 | // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 26 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 27 | // OTHER DEALINGS IN THE SOFTWARE. 28 | // 29 | 30 | 31 | #include "YAJLParser.h" 32 | 33 | typedef enum { 34 | YAJLDecoderCurrentTypeNone, 35 | YAJLDecoderCurrentTypeArray, 36 | YAJLDecoderCurrentTypeDict 37 | } YAJLDecoderCurrentType; 38 | 39 | extern NSInteger YAJLDocumentStackCapacity; 40 | 41 | @class YAJLDocument; 42 | 43 | /*! 44 | YAJLDocument delegate notified when objects are added. 45 | */ 46 | @protocol YAJLDocumentDelegate 47 | @optional 48 | /*! 49 | Did add dictionary. 50 | @param document Sender 51 | @param dict Dictionary that was added 52 | */ 53 | - (void)document:(YAJLDocument *)document didAddDictionary:(NSDictionary *)dict; 54 | 55 | /*! 56 | Did add array. 57 | @param document Sender 58 | @param array Array that was added 59 | */ 60 | - (void)document:(YAJLDocument *)document didAddArray:(NSArray *)array; 61 | 62 | /*! 63 | Did add object to array. 64 | @param document Sender 65 | @param object Object added 66 | @param array Array objct was added to 67 | */ 68 | - (void)document:(YAJLDocument *)document didAddObject:(id)object toArray:(NSArray *)array; 69 | 70 | /*! 71 | Did set object for key on dictionary. 72 | @param document Sender 73 | @param object Object that was set 74 | @param key Key 75 | @param dict Dictionary object was set for key on 76 | */ 77 | - (void)document:(YAJLDocument *)document didSetObject:(id)object forKey:(id)key inDictionary:(NSDictionary *)dict; 78 | @end 79 | 80 | /*! 81 | JSON document interface. 82 | 83 | @code 84 | NSData *data = [NSData dataWithContentsOfFile:@"example.json"]; 85 | NSError *error = nil; 86 | YAJLDocument *document = [[YAJLDocument alloc] initWithData:data parserOptions:YAJLParserOptionsNone error:&error]; 87 | // Access root element at document.root 88 | NSLog(@"Root: %@", document.root); 89 | [document release]; 90 | @endcode 91 | 92 | Example for streaming: 93 | @code 94 | YAJLDocument *document = [[YAJLDocument alloc] init]; 95 | document.delegate = self; 96 | 97 | NSError *error = nil; 98 | [document parse:chunk1 error:error]; 99 | [document parse:chunk2 error:error]; 100 | 101 | // You can access root element at document.root 102 | NSLog(@"Root: %@", document.root); 103 | [document release]; 104 | 105 | // Or via the YAJLDocumentDelegate delegate methods 106 | 107 | - (void)document:(YAJLDocument *)document didAddDictionary:(NSDictionary *)dict { } 108 | - (void)document:(YAJLDocument *)document didAddArray:(NSArray *)array { } 109 | - (void)document:(YAJLDocument *)document didAddObject:(id)object toArray:(NSArray *)array { } 110 | - (void)document:(YAJLDocument *)document didSetObject:(id)object forKey:(id)key inDictionary:(NSDictionary *)dict { } 111 | @endcode 112 | */ 113 | @interface YAJLDocument : NSObject { 114 | 115 | id root_; // NSArray or NSDictionary 116 | YAJLParser *parser_; 117 | 118 | // TODO(gabe): This should be __weak 119 | id delegate_; 120 | 121 | __weak NSMutableDictionary *dict_; // weak; if map in progress, points to the current map 122 | __weak NSMutableArray *array_; // weak; If array in progress, points the current array 123 | __weak NSString *key_; // weak; If map in progress, points to current key 124 | 125 | NSMutableArray *stack_; 126 | NSMutableArray *keyStack_; 127 | 128 | YAJLDecoderCurrentType currentType_; 129 | 130 | YAJLParserStatus parserStatus_; 131 | 132 | } 133 | 134 | @property (readonly, nonatomic) id root; //! The root element of the document, either NSArray or NSDictionary 135 | @property (readonly, nonatomic) YAJLParserStatus parserStatus; //! The current status of parsing 136 | @property (assign, nonatomic) id delegate; //! Delegate 137 | 138 | /*! 139 | Create document from data. 140 | @param data Data to parse 141 | @param parserOptions Parse options 142 | - YAJLParserOptionsNone: No options 143 | - YAJLParserOptionsAllowComments: Javascript style comments will be allowed in the input (both /&asterisk; &asterisk;/ and //) 144 | - YAJLParserOptionsCheckUTF8: Invalid UTF8 strings will cause a parse error 145 | - YAJLParserOptionsStrictPrecision: If YES will force strict precision and return integer overflow error 146 | @param error Error to set on failure 147 | */ 148 | - (id)initWithData:(NSData *)data parserOptions:(YAJLParserOptions)parserOptions error:(NSError **)error; 149 | 150 | /*! 151 | Create document from data. 152 | @param data Data to parse 153 | @param parserOptions Parse options 154 | - YAJLParserOptionsNone: No options 155 | - YAJLParserOptionsAllowComments: Javascript style comments will be allowed in the input (both /&asterisk; &asterisk;/ and //) 156 | - YAJLParserOptionsCheckUTF8: Invalid UTF8 strings will cause a parse error 157 | - YAJLParserOptionsStrictPrecision: If YES will force strict precision and return integer overflow error 158 | @param capacity Initial capacity for NSArray and NSDictionary objects (Defaults to 20) 159 | @param error Error to set on failure 160 | */ 161 | - (id)initWithData:(NSData *)data parserOptions:(YAJLParserOptions)parserOptions capacity:(NSInteger)capacity error:(NSError **)error; 162 | 163 | /*! 164 | Create empty document with parser options. 165 | @param parserOptions Parse options 166 | - YAJLParserOptionsNone: No options 167 | - YAJLParserOptionsAllowComments: Javascript style comments will be allowed in the input (both /&asterisk; &asterisk;/ and //) 168 | - YAJLParserOptionsCheckUTF8: Invalid UTF8 strings will cause a parse error 169 | - YAJLParserOptionsStrictPrecision: If YES will force strict precision and return integer overflow error 170 | */ 171 | - (id)initWithParserOptions:(YAJLParserOptions)parserOptions; 172 | 173 | /*! 174 | Create empty document with parser options. 175 | @param parserOptions Parse options 176 | - YAJLParserOptionsNone: No options 177 | - YAJLParserOptionsAllowComments: Javascript style comments will be allowed in the input (both /&asterisk; &asterisk;/ and //) 178 | - YAJLParserOptionsCheckUTF8: Invalid UTF8 strings will cause a parse error 179 | - YAJLParserOptionsStrictPrecision: If YES will force strict precision and return integer overflow error 180 | @param capacity Initial capacity for NSArray and NSDictionary objects (Defaults to 20) 181 | */ 182 | - (id)initWithParserOptions:(YAJLParserOptions)parserOptions capacity:(NSInteger)capacity; 183 | 184 | /*! 185 | Parse data. 186 | @param data Data to parse 187 | @param error Out error to set on failure 188 | @result Parser status 189 | - YAJLParserStatusNone: No status 190 | - YAJLParserStatusOK: Parsed OK 191 | - YAJLParserStatusInsufficientData: There was insufficient data 192 | - YAJLParserStatusError: Parser errored 193 | */ 194 | - (YAJLParserStatus)parse:(NSData *)data error:(NSError **)error; 195 | 196 | @end 197 | -------------------------------------------------------------------------------- /YAJL.framework/Versions/A/Headers/YAJLGen.h: -------------------------------------------------------------------------------- 1 | // 2 | // YAJLGen.h 3 | // YAJL 4 | // 5 | // Created by Gabriel Handford on 7/19/09. 6 | // Copyright 2009. All rights reserved. 7 | // 8 | // Permission is hereby granted, free of charge, to any person 9 | // obtaining a copy of this software and associated documentation 10 | // files (the "Software"), to deal in the Software without 11 | // restriction, including without limitation the rights to use, 12 | // copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the 14 | // Software is furnished to do so, subject to the following 15 | // conditions: 16 | // 17 | // The above copyright notice and this permission notice shall be 18 | // included in all copies or substantial portions of the Software. 19 | // 20 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21 | // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 22 | // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 23 | // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 24 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 25 | // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 26 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 27 | // OTHER DEALINGS IN THE SOFTWARE. 28 | // 29 | 30 | #include "yajl_gen.h" 31 | 32 | 33 | extern NSString *const YAJLGenInvalidObjectException; //! Exception type if we encounter invalid object 34 | 35 | //! JSON generate options 36 | enum YAJLGenOptions { 37 | YAJLGenOptionsNone = 0, //!< No options 38 | YAJLGenOptionsBeautify = 1 << 0, //!< Beautifiy JSON output 39 | YAJLGenOptionsIgnoreUnknownTypes = 1 << 1, //!< Ignore unknown types (will use null value) 40 | YAJLGenOptionsIncludeUnsupportedTypes = 1 << 2, //!< Handle non-JSON types (including NSDate, NSData, NSURL) 41 | }; 42 | typedef NSUInteger YAJLGenOptions; 43 | 44 | /*! 45 | YAJL JSON string generator. 46 | Supports the following types: 47 | - NSArray 48 | - NSDictionary 49 | - NSString 50 | - NSNumber 51 | - NSNull 52 | 53 | We also support the following types (if using YAJLGenOptionsIncludeUnsupportedTypes option), 54 | by converting to JSON supported types: 55 | - NSDate: number representing number of milliseconds since (1970) epoch 56 | - NSData: Base64 encoded string 57 | - NSURL: URL (absolute) string 58 | */ 59 | @interface YAJLGen : NSObject { 60 | yajl_gen gen_; 61 | 62 | YAJLGenOptions genOptions_; 63 | } 64 | 65 | /*! 66 | JSON generator with options. 67 | @param genOptions Generate options 68 | - YAJLGenOptionsNone: No options 69 | - YAJLGenOptionsBeautify: Beautifiy JSON output 70 | - YAJLGenOptionsIgnoreUnknownTypes: Ignore unknown types (will use null value) 71 | - YAJLGenOptionsIncludeUnsupportedTypes: Handle non-JSON types (including NSDate, NSData, NSURL) 72 | 73 | @param indentString String for indentation 74 | */ 75 | - (id)initWithGenOptions:(YAJLGenOptions)genOptions indentString:(NSString *)indentString; 76 | 77 | /*! 78 | Write JSON for object to buffer. 79 | @param obj Supported or custom object 80 | */ 81 | - (void)object:(id)obj; 82 | 83 | /*! 84 | Write null value to buffer. 85 | */ 86 | - (void)null; 87 | 88 | /*! 89 | Write bool value to buffer. 90 | @param b Output true or false 91 | */ 92 | - (void)bool:(BOOL)b; 93 | 94 | /*! 95 | Write numeric value to buffer. 96 | @param number Numeric value 97 | */ 98 | - (void)number:(NSNumber *)number; 99 | 100 | /*! 101 | Write string value to buffer. 102 | @param s String value 103 | */ 104 | - (void)string:(NSString *)s; 105 | 106 | /*! 107 | Write dictionary start ('{') to buffer. 108 | */ 109 | - (void)startDictionary; 110 | 111 | /*! 112 | Write dictionary end ('}') to buffer. 113 | */ 114 | - (void)endDictionary; 115 | 116 | /*! 117 | Write array start ('[') to buffer. 118 | */ 119 | - (void)startArray; 120 | 121 | /*! 122 | Write array end (']') to buffer. 123 | */ 124 | - (void)endArray; 125 | 126 | /*! 127 | Clear JSON buffer. 128 | */ 129 | - (void)clear; 130 | 131 | /*! 132 | Get current JSON buffer. 133 | */ 134 | - (NSString *)buffer; 135 | 136 | @end 137 | 138 | 139 | /*! 140 | Custom objects can support manual JSON encoding. 141 | 142 | @code 143 | @interface CustomObject : NSObject 144 | @end 145 | 146 | @implementation CustomObject 147 | 148 | - (id)JSON { 149 | return [NSArray arrayWithObject:[NSNumber numberWithInteger:1]]; 150 | } 151 | 152 | @end 153 | @endcode 154 | 155 | And then: 156 | 157 | @code 158 | CustomObject *customObject = [[CustomObject alloc] init]; 159 | NSString *JSONString = [customObject yajl_JSON]; 160 | // JSONString == "[1]"; 161 | @endcode 162 | */ 163 | @protocol YAJLCoding 164 | 165 | /*! 166 | Provide custom and/or encodable object to parse to JSON string. 167 | @result Object encodable as JSON such as NSDictionary, NSArray, etc 168 | */ 169 | - (id)JSON; 170 | 171 | @end 172 | -------------------------------------------------------------------------------- /YAJL.framework/Versions/A/Headers/YAJLParser.h: -------------------------------------------------------------------------------- 1 | // 2 | // YAJLParser.h 3 | // YAJL 4 | // 5 | // Created by Gabriel Handford on 6/14/09. 6 | // Copyright 2009. All rights reserved. 7 | // 8 | // Permission is hereby granted, free of charge, to any person 9 | // obtaining a copy of this software and associated documentation 10 | // files (the "Software"), to deal in the Software without 11 | // restriction, including without limitation the rights to use, 12 | // copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the 14 | // Software is furnished to do so, subject to the following 15 | // conditions: 16 | // 17 | // The above copyright notice and this permission notice shall be 18 | // included in all copies or substantial portions of the Software. 19 | // 20 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21 | // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 22 | // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 23 | // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 24 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 25 | // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 26 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 27 | // OTHER DEALINGS IN THE SOFTWARE. 28 | // 29 | 30 | 31 | #include "yajl_parse.h" 32 | 33 | 34 | extern NSString *const YAJLErrorDomain; //! Error domain for YAJL 35 | extern NSString *const YAJLParserException; //! Generic parse exception 36 | extern NSString *const YAJLParsingUnsupportedException; //! Parsing unsupported exception 37 | 38 | extern NSString *const YAJLParserValueKey; //! Key in NSError userInfo for value we errored on 39 | 40 | //! Parser error codes 41 | enum YAJLParserErrorCode { 42 | YAJLParserErrorCodeAllocError = -1000, //!< Alloc error 43 | YAJLParserErrorCodeDoubleOverflow = -1001, //!< Double overflow 44 | YAJLParserErrorCodeIntegerOverflow = -1002 //!< Integer overflow 45 | }; 46 | typedef NSInteger YAJLParserErrorCode; //! Parser error codes 47 | 48 | //! Parser options 49 | enum YAJLParserOptions { 50 | YAJLParserOptionsNone = 0, //!< No options 51 | YAJLParserOptionsAllowComments = 1 << 0, //!< Javascript style comments will be allowed in the input (both /&asterisk; &asterisk;/ and //) 52 | YAJLParserOptionsCheckUTF8 = 1 << 1, //!< Invalid UTF8 strings will cause a parse error 53 | YAJLParserOptionsStrictPrecision = 1 << 2, //!< If YES will force strict precision and return integer overflow error 54 | }; 55 | typedef NSUInteger YAJLParserOptions; //! Parser options 56 | 57 | //! Parser status 58 | enum { 59 | YAJLParserStatusNone = 0, //!< No status 60 | YAJLParserStatusOK = 1, //!< Parsed OK 61 | YAJLParserStatusInsufficientData = 2, //!< There was insufficient data 62 | YAJLParserStatusError = 3 //!< Parser errored 63 | }; 64 | typedef NSUInteger YAJLParserStatus; //!< Status of the last parse event 65 | 66 | 67 | @class YAJLParser; 68 | 69 | /*! 70 | Delegate for YAJL JSON parser. 71 | */ 72 | @protocol YAJLParserDelegate 73 | 74 | /*! 75 | Parser did start dictionary. 76 | @param parser Sender 77 | */ 78 | - (void)parserDidStartDictionary:(YAJLParser *)parser; 79 | 80 | /*! 81 | Parser did end dictionary. 82 | @param parser Sender 83 | */ 84 | - (void)parserDidEndDictionary:(YAJLParser *)parser; 85 | 86 | /*! 87 | Parser did start array. 88 | @param parser Sender 89 | */ 90 | - (void)parserDidStartArray:(YAJLParser *)parser; 91 | 92 | /*! 93 | Parser did end array. 94 | @param parser Sender 95 | */ 96 | - (void)parserDidEndArray:(YAJLParser *)parser; 97 | 98 | /*! 99 | Parser did map key. 100 | @param parser Sender 101 | @param key Key that was mapped 102 | */ 103 | - (void)parser:(YAJLParser *)parser didMapKey:(NSString *)key; 104 | 105 | /*! 106 | Did add value. 107 | @param parser Sender 108 | @param value Value of type NSNull, NSString or NSNumber 109 | */ 110 | - (void)parser:(YAJLParser *)parser didAdd:(id)value; 111 | 112 | @end 113 | 114 | /*! 115 | JSON parser. 116 | 117 | @code 118 | NSData *data = [NSData dataWithContentsOfFile:@"example.json"]; 119 | 120 | YAJLParser *parser = [[YAJLParser alloc] initWithParserOptions:YAJLParserOptionsAllowComments]; 121 | parser.delegate = self; 122 | [parser parse:data]; 123 | if (parser.parserError) { 124 | NSLog(@"Error:\n%@", parser.parserError); 125 | } 126 | 127 | parser.delegate = nil; 128 | [parser release]; 129 | 130 | // Include delegate methods from YAJLParserDelegate 131 | - (void)parserDidStartDictionary:(YAJLParser *)parser { } 132 | - (void)parserDidEndDictionary:(YAJLParser *)parser { } 133 | 134 | - (void)parserDidStartArray:(YAJLParser *)parser { } 135 | - (void)parserDidEndArray:(YAJLParser *)parser { } 136 | 137 | - (void)parser:(YAJLParser *)parser didMapKey:(NSString *)key { } 138 | - (void)parser:(YAJLParser *)parser didAdd:(id)value { } 139 | @endcode 140 | */ 141 | @interface YAJLParser : NSObject { 142 | 143 | yajl_handle handle_; 144 | 145 | __weak id delegate_; // weak 146 | 147 | YAJLParserOptions parserOptions_; 148 | 149 | NSError *parserError_; 150 | } 151 | 152 | @property (weak, nonatomic) id delegate; 153 | @property (readonly, retain, nonatomic) NSError *parserError; 154 | @property (readonly, nonatomic) YAJLParserOptions parserOptions; 155 | 156 | /*! 157 | Create parser with data and options. 158 | @param parserOptions Parser options 159 | - YAJLParserOptionsNone: No options 160 | - YAJLParserOptionsAllowComments: Javascript style comments will be allowed in the input (both /&asterisk; &asterisk;/ and //) 161 | - YAJLParserOptionsCheckUTF8: Invalid UTF8 strings will cause a parse error 162 | - YAJLParserOptionsStrictPrecision: If YES will force strict precision and return integer overflow error 163 | */ 164 | - (id)initWithParserOptions:(YAJLParserOptions)parserOptions; 165 | 166 | /*! 167 | Parse data. 168 | 169 | If streaming, you can call parse multiple times as long as 170 | previous calls return YAJLParserStatusInsufficientData. 171 | 172 | @param data 173 | @result Parser status 174 | - YAJLParserStatusNone: No status 175 | - YAJLParserStatusOK: Parsed OK 176 | - YAJLParserStatusInsufficientData: There was insufficient data 177 | - YAJLParserStatusError: Parser errored 178 | */ 179 | - (YAJLParserStatus)parse:(NSData *)data; 180 | 181 | @end 182 | -------------------------------------------------------------------------------- /YAJL.framework/Versions/A/Headers/yajl_common.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2010, Lloyd Hilaiel. 3 | * 4 | * Redistribution and use in source and binary forms, with or without 5 | * modification, are permitted provided that the following conditions are 6 | * met: 7 | * 8 | * 1. Redistributions of source code must retain the above copyright 9 | * notice, this list of conditions and the following disclaimer. 10 | * 11 | * 2. Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in 13 | * the documentation and/or other materials provided with the 14 | * distribution. 15 | * 16 | * 3. Neither the name of Lloyd Hilaiel nor the names of its 17 | * contributors may be used to endorse or promote products derived 18 | * from this software without specific prior written permission. 19 | * 20 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 21 | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 22 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 24 | * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 25 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 28 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 29 | * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 | * POSSIBILITY OF SUCH DAMAGE. 31 | */ 32 | 33 | #ifndef __YAJL_COMMON_H__ 34 | #define __YAJL_COMMON_H__ 35 | 36 | #ifdef __cplusplus 37 | extern "C" { 38 | #endif 39 | 40 | #define YAJL_MAX_DEPTH 128 41 | 42 | /* msft dll export gunk. To build a DLL on windows, you 43 | * must define WIN32, YAJL_SHARED, and YAJL_BUILD. To use a shared 44 | * DLL, you must define YAJL_SHARED and WIN32 */ 45 | #if defined(WIN32) && defined(YAJL_SHARED) 46 | # ifdef YAJL_BUILD 47 | # define YAJL_API __declspec(dllexport) 48 | # else 49 | # define YAJL_API __declspec(dllimport) 50 | # endif 51 | #else 52 | # define YAJL_API 53 | #endif 54 | 55 | /** pointer to a malloc function, supporting client overriding memory 56 | * allocation routines */ 57 | typedef void * (*yajl_malloc_func)(void *ctx, unsigned int sz); 58 | 59 | /** pointer to a free function, supporting client overriding memory 60 | * allocation routines */ 61 | typedef void (*yajl_free_func)(void *ctx, void * ptr); 62 | 63 | /** pointer to a realloc function which can resize an allocation. */ 64 | typedef void * (*yajl_realloc_func)(void *ctx, void * ptr, unsigned int sz); 65 | 66 | /** A structure which can be passed to yajl_*_alloc routines to allow the 67 | * client to specify memory allocation functions to be used. */ 68 | typedef struct 69 | { 70 | /** pointer to a function that can allocate uninitialized memory */ 71 | yajl_malloc_func malloc; 72 | /** pointer to a function that can resize memory allocations */ 73 | yajl_realloc_func realloc; 74 | /** pointer to a function that can free memory allocated using 75 | * reallocFunction or mallocFunction */ 76 | yajl_free_func free; 77 | /** a context pointer that will be passed to above allocation routines */ 78 | void * ctx; 79 | } yajl_alloc_funcs; 80 | 81 | #ifdef __cplusplus 82 | } 83 | #endif 84 | 85 | #endif 86 | -------------------------------------------------------------------------------- /YAJL.framework/Versions/A/Headers/yajl_gen.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2010, Lloyd Hilaiel. 3 | * 4 | * Redistribution and use in source and binary forms, with or without 5 | * modification, are permitted provided that the following conditions are 6 | * met: 7 | * 8 | * 1. Redistributions of source code must retain the above copyright 9 | * notice, this list of conditions and the following disclaimer. 10 | * 11 | * 2. Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in 13 | * the documentation and/or other materials provided with the 14 | * distribution. 15 | * 16 | * 3. Neither the name of Lloyd Hilaiel nor the names of its 17 | * contributors may be used to endorse or promote products derived 18 | * from this software without specific prior written permission. 19 | * 20 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 21 | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 22 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 24 | * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 25 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 28 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 29 | * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 | * POSSIBILITY OF SUCH DAMAGE. 31 | */ 32 | 33 | /** 34 | * \file yajl_gen.h 35 | * Interface to YAJL's JSON generation facilities. 36 | */ 37 | 38 | #include 39 | 40 | #ifndef __YAJL_GEN_H__ 41 | #define __YAJL_GEN_H__ 42 | 43 | #ifdef __cplusplus 44 | extern "C" { 45 | #endif 46 | /** generator status codes */ 47 | typedef enum { 48 | /** no error */ 49 | yajl_gen_status_ok = 0, 50 | /** at a point where a map key is generated, a function other than 51 | * yajl_gen_string was called */ 52 | yajl_gen_keys_must_be_strings, 53 | /** YAJL's maximum generation depth was exceeded. see 54 | * YAJL_MAX_DEPTH */ 55 | yajl_max_depth_exceeded, 56 | /** A generator function (yajl_gen_XXX) was called while in an error 57 | * state */ 58 | yajl_gen_in_error_state, 59 | /** A complete JSON document has been generated */ 60 | yajl_gen_generation_complete, 61 | /** yajl_gen_double was passed an invalid floating point value 62 | * (infinity or NaN). */ 63 | yajl_gen_invalid_number, 64 | /** A print callback was passed in, so there is no internal 65 | * buffer to get from */ 66 | yajl_gen_no_buf 67 | } yajl_gen_status; 68 | 69 | /** an opaque handle to a generator */ 70 | typedef struct yajl_gen_t * yajl_gen; 71 | 72 | /** a callback used for "printing" the results. */ 73 | typedef void (*yajl_print_t)(void * ctx, 74 | const char * str, 75 | unsigned int len); 76 | 77 | /** configuration structure for the generator */ 78 | typedef struct { 79 | /** generate indented (beautiful) output */ 80 | unsigned int beautify; 81 | /** an opportunity to define an indent string. such as \\t or 82 | * some number of spaces. default is four spaces ' '. This 83 | * member is only relevant when beautify is true */ 84 | const char * indentString; 85 | } yajl_gen_config; 86 | 87 | /** allocate a generator handle 88 | * \param config a pointer to a structure containing parameters which 89 | * configure the behavior of the json generator 90 | * \param allocFuncs an optional pointer to a structure which allows 91 | * the client to overide the memory allocation 92 | * used by yajl. May be NULL, in which case 93 | * malloc/free/realloc will be used. 94 | * 95 | * \returns an allocated handle on success, NULL on failure (bad params) 96 | */ 97 | YAJL_API yajl_gen yajl_gen_alloc(const yajl_gen_config * config, 98 | const yajl_alloc_funcs * allocFuncs); 99 | 100 | /** allocate a generator handle that will print to the specified 101 | * callback rather than storing the results in an internal buffer. 102 | * \param callback a pointer to a printer function. May be NULL 103 | * in which case, the results will be store in an 104 | * internal buffer. 105 | * \param config a pointer to a structure containing parameters 106 | * which configure the behavior of the json 107 | * generator. 108 | * \param allocFuncs an optional pointer to a structure which allows 109 | * the client to overide the memory allocation 110 | * used by yajl. May be NULL, in which case 111 | * malloc/free/realloc will be used. 112 | * \param ctx a context pointer that will be passed to the 113 | * printer callback. 114 | * 115 | * \returns an allocated handle on success, NULL on failure (bad params) 116 | */ 117 | YAJL_API yajl_gen yajl_gen_alloc2(const yajl_print_t callback, 118 | const yajl_gen_config * config, 119 | const yajl_alloc_funcs * allocFuncs, 120 | void * ctx); 121 | 122 | /** free a generator handle */ 123 | YAJL_API void yajl_gen_free(yajl_gen handle); 124 | 125 | YAJL_API yajl_gen_status yajl_gen_integer(yajl_gen hand, long int number); 126 | /** generate a floating point number. number may not be infinity or 127 | * NaN, as these have no representation in JSON. In these cases the 128 | * generator will return 'yajl_gen_invalid_number' */ 129 | YAJL_API yajl_gen_status yajl_gen_double(yajl_gen hand, double number); 130 | YAJL_API yajl_gen_status yajl_gen_number(yajl_gen hand, 131 | const char * num, 132 | unsigned int len); 133 | YAJL_API yajl_gen_status yajl_gen_string(yajl_gen hand, 134 | const unsigned char * str, 135 | unsigned int len); 136 | YAJL_API yajl_gen_status yajl_gen_null(yajl_gen hand); 137 | YAJL_API yajl_gen_status yajl_gen_bool(yajl_gen hand, int boolean); 138 | YAJL_API yajl_gen_status yajl_gen_map_open(yajl_gen hand); 139 | YAJL_API yajl_gen_status yajl_gen_map_close(yajl_gen hand); 140 | YAJL_API yajl_gen_status yajl_gen_array_open(yajl_gen hand); 141 | YAJL_API yajl_gen_status yajl_gen_array_close(yajl_gen hand); 142 | 143 | /** access the null terminated generator buffer. If incrementally 144 | * outputing JSON, one should call yajl_gen_clear to clear the 145 | * buffer. This allows stream generation. */ 146 | YAJL_API yajl_gen_status yajl_gen_get_buf(yajl_gen hand, 147 | const unsigned char ** buf, 148 | unsigned int * len); 149 | 150 | /** clear yajl's output buffer, but maintain all internal generation 151 | * state. This function will not "reset" the generator state, and is 152 | * intended to enable incremental JSON outputing. */ 153 | YAJL_API void yajl_gen_clear(yajl_gen hand); 154 | 155 | #ifdef __cplusplus 156 | } 157 | #endif 158 | 159 | #endif 160 | -------------------------------------------------------------------------------- /YAJL.framework/Versions/A/Headers/yajl_parse.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2010, Lloyd Hilaiel. 3 | * 4 | * Redistribution and use in source and binary forms, with or without 5 | * modification, are permitted provided that the following conditions are 6 | * met: 7 | * 8 | * 1. Redistributions of source code must retain the above copyright 9 | * notice, this list of conditions and the following disclaimer. 10 | * 11 | * 2. Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in 13 | * the documentation and/or other materials provided with the 14 | * distribution. 15 | * 16 | * 3. Neither the name of Lloyd Hilaiel nor the names of its 17 | * contributors may be used to endorse or promote products derived 18 | * from this software without specific prior written permission. 19 | * 20 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 21 | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 22 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 24 | * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 25 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 28 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 29 | * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 | * POSSIBILITY OF SUCH DAMAGE. 31 | */ 32 | 33 | /** 34 | * \file yajl_parse.h 35 | * Interface to YAJL's JSON parsing facilities. 36 | */ 37 | 38 | #include 39 | 40 | #ifndef __YAJL_PARSE_H__ 41 | #define __YAJL_PARSE_H__ 42 | 43 | #ifdef __cplusplus 44 | extern "C" { 45 | #endif 46 | /** error codes returned from this interface */ 47 | typedef enum { 48 | /** no error was encountered */ 49 | yajl_status_ok, 50 | /** a client callback returned zero, stopping the parse */ 51 | yajl_status_client_canceled, 52 | /** The parse cannot yet complete because more json input text 53 | * is required, call yajl_parse with the next buffer of input text. 54 | * (pertinent only when stream parsing) */ 55 | yajl_status_insufficient_data, 56 | /** An error occured during the parse. Call yajl_get_error for 57 | * more information about the encountered error */ 58 | yajl_status_error 59 | } yajl_status; 60 | 61 | /** attain a human readable, english, string for an error */ 62 | YAJL_API const char * yajl_status_to_string(yajl_status code); 63 | 64 | /** an opaque handle to a parser */ 65 | typedef struct yajl_handle_t * yajl_handle; 66 | 67 | /** yajl is an event driven parser. this means as json elements are 68 | * parsed, you are called back to do something with the data. The 69 | * functions in this table indicate the various events for which 70 | * you will be called back. Each callback accepts a "context" 71 | * pointer, this is a void * that is passed into the yajl_parse 72 | * function which the client code may use to pass around context. 73 | * 74 | * All callbacks return an integer. If non-zero, the parse will 75 | * continue. If zero, the parse will be canceled and 76 | * yajl_status_client_canceled will be returned from the parse. 77 | * 78 | * Note about handling of numbers: 79 | * yajl will only convert numbers that can be represented in a double 80 | * or a long int. All other numbers will be passed to the client 81 | * in string form using the yajl_number callback. Furthermore, if 82 | * yajl_number is not NULL, it will always be used to return numbers, 83 | * that is yajl_integer and yajl_double will be ignored. If 84 | * yajl_number is NULL but one of yajl_integer or yajl_double are 85 | * defined, parsing of a number larger than is representable 86 | * in a double or long int will result in a parse error. 87 | */ 88 | typedef struct { 89 | int (* yajl_null)(void * ctx); 90 | int (* yajl_boolean)(void * ctx, int boolVal); 91 | int (* yajl_integer)(void * ctx, long integerVal); 92 | int (* yajl_double)(void * ctx, double doubleVal); 93 | /** A callback which passes the string representation of the number 94 | * back to the client. Will be used for all numbers when present */ 95 | int (* yajl_number)(void * ctx, const char * numberVal, 96 | unsigned int numberLen); 97 | 98 | /** strings are returned as pointers into the JSON text when, 99 | * possible, as a result, they are _not_ null padded */ 100 | int (* yajl_string)(void * ctx, const unsigned char * stringVal, 101 | unsigned int stringLen); 102 | 103 | int (* yajl_start_map)(void * ctx); 104 | int (* yajl_map_key)(void * ctx, const unsigned char * key, 105 | unsigned int stringLen); 106 | int (* yajl_end_map)(void * ctx); 107 | 108 | int (* yajl_start_array)(void * ctx); 109 | int (* yajl_end_array)(void * ctx); 110 | } yajl_callbacks; 111 | 112 | /** configuration structure for the generator */ 113 | typedef struct { 114 | /** if nonzero, javascript style comments will be allowed in 115 | * the json input, both slash star and slash slash */ 116 | unsigned int allowComments; 117 | /** if nonzero, invalid UTF8 strings will cause a parse 118 | * error */ 119 | unsigned int checkUTF8; 120 | } yajl_parser_config; 121 | 122 | /** allocate a parser handle 123 | * \param callbacks a yajl callbacks structure specifying the 124 | * functions to call when different JSON entities 125 | * are encountered in the input text. May be NULL, 126 | * which is only useful for validation. 127 | * \param config configuration parameters for the parse. 128 | * \param ctx a context pointer that will be passed to callbacks. 129 | */ 130 | YAJL_API yajl_handle yajl_alloc(const yajl_callbacks * callbacks, 131 | const yajl_parser_config * config, 132 | const yajl_alloc_funcs * allocFuncs, 133 | void * ctx); 134 | 135 | /** free a parser handle */ 136 | YAJL_API void yajl_free(yajl_handle handle); 137 | 138 | /** Parse some json! 139 | * \param hand - a handle to the json parser allocated with yajl_alloc 140 | * \param jsonText - a pointer to the UTF8 json text to be parsed 141 | * \param jsonTextLength - the length, in bytes, of input text 142 | */ 143 | YAJL_API yajl_status yajl_parse(yajl_handle hand, 144 | const unsigned char * jsonText, 145 | unsigned int jsonTextLength); 146 | 147 | /** Parse any remaining buffered json. 148 | * Since yajl is a stream-based parser, without an explicit end of 149 | * input, yajl sometimes can't decide if content at the end of the 150 | * stream is valid or not. For example, if "1" has been fed in, 151 | * yajl can't know whether another digit is next or some character 152 | * that would terminate the integer token. 153 | * 154 | * \param hand - a handle to the json parser allocated with yajl_alloc 155 | */ 156 | YAJL_API yajl_status yajl_parse_complete(yajl_handle hand); 157 | 158 | /** get an error string describing the state of the 159 | * parse. 160 | * 161 | * If verbose is non-zero, the message will include the JSON 162 | * text where the error occured, along with an arrow pointing to 163 | * the specific char. 164 | * 165 | * \returns A dynamically allocated string will be returned which should 166 | * be freed with yajl_free_error 167 | */ 168 | YAJL_API unsigned char * yajl_get_error(yajl_handle hand, int verbose, 169 | const unsigned char * jsonText, 170 | unsigned int jsonTextLength); 171 | 172 | /** 173 | * get the amount of data consumed from the last chunk passed to YAJL. 174 | * 175 | * In the case of a successful parse this can help you understand if 176 | * the entire buffer was consumed (which will allow you to handle 177 | * "junk at end of input". 178 | * 179 | * In the event an error is encountered during parsing, this function 180 | * affords the client a way to get the offset into the most recent 181 | * chunk where the error occured. 0 will be returned if no error 182 | * was encountered. 183 | */ 184 | YAJL_API unsigned int yajl_get_bytes_consumed(yajl_handle hand); 185 | 186 | /** free an error returned from yajl_get_error */ 187 | YAJL_API void yajl_free_error(yajl_handle hand, unsigned char * str); 188 | 189 | #ifdef __cplusplus 190 | } 191 | #endif 192 | 193 | #endif 194 | -------------------------------------------------------------------------------- /YAJL.framework/Versions/A/Headers/yajl_version.h: -------------------------------------------------------------------------------- 1 | #ifndef YAJL_VERSION_H_ 2 | #define YAJL_VERSION_H_ 3 | 4 | #include 5 | 6 | #define YAJL_MAJOR 1 7 | #define YAJL_MINOR 0 8 | #define YAJL_MICRO 11 9 | 10 | #define YAJL_VERSION ((YAJL_MAJOR * 10000) + (YAJL_MINOR * 100) + YAJL_MICRO) 11 | 12 | #ifdef __cplusplus 13 | extern "C" { 14 | #endif 15 | 16 | extern int YAJL_API yajl_version(void); 17 | 18 | #ifdef __cplusplus 19 | } 20 | #endif 21 | 22 | #endif /* YAJL_VERSION_H_ */ 23 | 24 | -------------------------------------------------------------------------------- /YAJL.framework/Versions/A/Resources/English.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quicksilver/1Password-Plugin/1473098683bd7987f5cd42f2255f6787c54b88ee/YAJL.framework/Versions/A/Resources/English.lproj/InfoPlist.strings -------------------------------------------------------------------------------- /YAJL.framework/Versions/A/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | YAJL 9 | CFBundleIdentifier 10 | me.rel.YAJL 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | YAJL 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleSignature 18 | GABE 19 | CFBundleVersion 20 | 0.2.26 21 | 22 | 23 | -------------------------------------------------------------------------------- /YAJL.framework/Versions/A/YAJL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quicksilver/1Password-Plugin/1473098683bd7987f5cd42f2255f6787c54b88ee/YAJL.framework/Versions/A/YAJL -------------------------------------------------------------------------------- /YAJL.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | A -------------------------------------------------------------------------------- /YAJL.framework/YAJL: -------------------------------------------------------------------------------- 1 | Versions/Current/YAJL --------------------------------------------------------------------------------