├── .gitattributes ├── .gitignore ├── Classes ├── Foundation │ ├── LRFoundationMacros.h │ ├── NSArray+Indexing.h │ ├── NSArray+Indexing.m │ ├── NSData+Base64.h │ ├── NSData+Base64.m │ ├── NSString+FileSize.h │ ├── NSString+FileSize.m │ ├── NSString+GHTimeInterval.h │ ├── NSString+GHTimeInterval.m │ ├── NSString+Hashing.h │ ├── NSString+Hashing.m │ ├── NSURL+StringFormat.h │ └── NSURL+StringFormat.m └── UIKit │ ├── LRPopoverManager.h │ ├── LRPopoverManager.m │ ├── LRTableViewCollection.h │ ├── LRTableViewCollection.m │ ├── LRUIColorPallette.h │ ├── LRUIColorPallette.m │ ├── UIColor+Hex.h │ ├── UIColor+Hex.m │ ├── UIColor+SharedPallette.h │ ├── UIColor+SharedPallette.m │ ├── UIImage+Alpha.h │ ├── UIImage+Alpha.m │ ├── UIImage+Resize.h │ ├── UIImage+Resize.m │ ├── UIImage+RoundedCorner.h │ ├── UIImage+RoundedCorner.m │ ├── UIImageView+LRAdditions.h │ ├── UIImageView+LRAdditions.m │ ├── UIToolbar+LRAdditions.h │ ├── UIToolbar+LRAdditions.m │ ├── UIView+Position.h │ └── UIView+Position.m ├── LICENSE ├── LRToolkit.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcuserdata │ │ └── luke.xcuserdatad │ │ └── WorkspaceState.xcuserstate └── xcuserdata │ └── luke.xcuserdatad │ └── xcschemes │ ├── LRToolkit.xcscheme │ └── xcschememanagement.plist ├── LRToolkit_Prefix.pch └── README.markdown /.gitattributes: -------------------------------------------------------------------------------- 1 | *.pbxproj -crlf -diff -merge 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Mac OS X Finder and whatnot 2 | .DS_Store 3 | 4 | # XCode (and ancestors) per-user config (very noisy, and not relevant) 5 | *.mode1 6 | *.mode1v3 7 | *.mode2v3 8 | *.perspective 9 | *.perspectivev3 10 | *.pbxuser 11 | 12 | 13 | # Generated files 14 | VersionX-revision.h 15 | 16 | 17 | # build products 18 | build/ 19 | *.[oa] 20 | 21 | # Other source repository archive directories (protects when importing) 22 | .hg 23 | .svn 24 | CVS 25 | 26 | 27 | # automatic backup files 28 | *~.nib 29 | *.swp 30 | *~ 31 | *(Autosaved).rtfd/ 32 | Backup[ ]of[ ]*.pages/ 33 | Backup[ ]of[ ]*.key/ 34 | Backup[ ]of[ ]*.numbers/ 35 | -------------------------------------------------------------------------------- /Classes/Foundation/LRFoundationMacros.h: -------------------------------------------------------------------------------- 1 | // 2 | // LRFoundationMacros.h 3 | // LRToolkit 4 | // 5 | // Created by Luke Redpath on 20/06/2010. 6 | // Copyright 2010 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NSNumber *LR_NSNUM(int anInt) { 12 | return [NSNumber numberWithInt:anInt]; 13 | } 14 | -------------------------------------------------------------------------------- /Classes/Foundation/NSArray+Indexing.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+Indexing.h 3 | // LRToolkit 4 | // 5 | // Created by Luke Redpath on 16/02/2010. 6 | // Copyright 2010 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface NSArray (Indexing) 13 | 14 | - (NSArray *)indexUsingCollation:(UILocalizedIndexedCollation *)collation withSelector:(SEL)selector; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Classes/Foundation/NSArray+Indexing.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+Indexing.m 3 | // LRToolkit 4 | // 5 | // Created by Luke Redpath on 16/02/2010. 6 | // Copyright 2010 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import "NSArray+Indexing.h" 10 | 11 | 12 | @implementation NSArray (Indexing) 13 | 14 | - (NSArray *)indexUsingCollation:(UILocalizedIndexedCollation *)collation withSelector:(SEL)selector; 15 | { 16 | NSMutableArray *indexedCollection; 17 | 18 | NSInteger index, sectionTitlesCount = [[collation sectionTitles] count]; 19 | indexedCollection = [[NSMutableArray alloc] initWithCapacity:sectionTitlesCount]; 20 | 21 | for (index = 0; index < sectionTitlesCount; index++) { 22 | NSMutableArray *array = [[NSMutableArray alloc] init]; 23 | [indexedCollection addObject:array]; 24 | [array release]; 25 | } 26 | 27 | // Segregate the data into the appropriate section 28 | for (id object in self) { 29 | NSInteger sectionNumber = [collation sectionForObject:object collationStringSelector:selector]; 30 | [[indexedCollection objectAtIndex:sectionNumber] addObject:object]; 31 | } 32 | 33 | // Now that all the data's in place, each section array needs to be sorted. 34 | for (index = 0; index < sectionTitlesCount; index++) { 35 | NSMutableArray *arrayForSection = [indexedCollection objectAtIndex:index]; 36 | 37 | NSArray *sortedArray = [collation sortedArrayFromArray:arrayForSection collationStringSelector:selector]; 38 | [indexedCollection replaceObjectAtIndex:index withObject:sortedArray]; 39 | } 40 | NSArray *immutableCollection = [indexedCollection copy]; 41 | [indexedCollection release]; 42 | 43 | return [immutableCollection autorelease]; 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /Classes/Foundation/NSData+Base64.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSData+Base64.h 3 | // base64 4 | // 5 | // Created by Matt Gallagher on 2009/06/03. 6 | // Copyright 2009 Matt Gallagher. All rights reserved. 7 | // 8 | // Permission is given to use this source code file, free of charge, in any 9 | // project, commercial or otherwise, entirely at your risk, with the condition 10 | // that any redistribution (in part or whole) of source code must retain 11 | // this copyright and permission notice. Attribution in compiled projects is 12 | // appreciated but not required. 13 | // 14 | 15 | #import 16 | 17 | void *NewBase64Decode( 18 | const char *inputBuffer, 19 | size_t length, 20 | size_t *outputLength); 21 | 22 | char *NewBase64Encode( 23 | const void *inputBuffer, 24 | size_t length, 25 | bool separateLines, 26 | size_t *outputLength); 27 | 28 | @interface NSData (Base64) 29 | 30 | + (NSData *)dataFromBase64String:(NSString *)aString; 31 | - (NSString *)base64EncodedString; 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /Classes/Foundation/NSData+Base64.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSData+Base64.m 3 | // base64 4 | // 5 | // Created by Matt Gallagher on 2009/06/03. 6 | // Copyright 2009 Matt Gallagher. All rights reserved. 7 | // 8 | // Permission is given to use this source code file, free of charge, in any 9 | // project, commercial or otherwise, entirely at your risk, with the condition 10 | // that any redistribution (in part or whole) of source code must retain 11 | // this copyright and permission notice. Attribution in compiled projects is 12 | // appreciated but not required. 13 | // 14 | 15 | #import "NSData+Base64.h" 16 | 17 | // 18 | // Mapping from 6 bit pattern to ASCII character. 19 | // 20 | static unsigned char base64EncodeLookup[65] = 21 | "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 22 | 23 | // 24 | // Definition for "masked-out" areas of the base64DecodeLookup mapping 25 | // 26 | #define xx 65 27 | 28 | // 29 | // Mapping from ASCII character to 6 bit pattern. 30 | // 31 | static unsigned char base64DecodeLookup[256] = 32 | { 33 | xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, 34 | xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, 35 | xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, 62, xx, xx, xx, 63, 36 | 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, xx, xx, xx, xx, xx, xx, 37 | xx, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 38 | 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, xx, xx, xx, xx, xx, 39 | xx, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 40 | 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, xx, xx, xx, xx, xx, 41 | xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, 42 | xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, 43 | xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, 44 | xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, 45 | xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, 46 | xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, 47 | xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, 48 | xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, 49 | }; 50 | 51 | // 52 | // Fundamental sizes of the binary and base64 encode/decode units in bytes 53 | // 54 | #define BINARY_UNIT_SIZE 3 55 | #define BASE64_UNIT_SIZE 4 56 | 57 | // 58 | // NewBase64Decode 59 | // 60 | // Decodes the base64 ASCII string in the inputBuffer to a newly malloced 61 | // output buffer. 62 | // 63 | // inputBuffer - the source ASCII string for the decode 64 | // length - the length of the string or -1 (to specify strlen should be used) 65 | // outputLength - if not-NULL, on output will contain the decoded length 66 | // 67 | // returns the decoded buffer. Must be free'd by caller. Length is given by 68 | // outputLength. 69 | // 70 | void *NewBase64Decode( 71 | const char *inputBuffer, 72 | size_t length, 73 | size_t *outputLength) 74 | { 75 | if (length == -1) 76 | { 77 | length = strlen(inputBuffer); 78 | } 79 | 80 | size_t outputBufferSize = 81 | ((length+BASE64_UNIT_SIZE-1) / BASE64_UNIT_SIZE) * BINARY_UNIT_SIZE; 82 | unsigned char *outputBuffer = (unsigned char *)malloc(outputBufferSize); 83 | 84 | size_t i = 0; 85 | size_t j = 0; 86 | while (i < length) 87 | { 88 | // 89 | // Accumulate 4 valid characters (ignore everything else) 90 | // 91 | unsigned char accumulated[BASE64_UNIT_SIZE]; 92 | size_t accumulateIndex = 0; 93 | while (i < length) 94 | { 95 | unsigned char decode = base64DecodeLookup[inputBuffer[i++]]; 96 | if (decode != xx) 97 | { 98 | accumulated[accumulateIndex] = decode; 99 | accumulateIndex++; 100 | 101 | if (accumulateIndex == BASE64_UNIT_SIZE) 102 | { 103 | break; 104 | } 105 | } 106 | } 107 | 108 | // 109 | // Store the 6 bits from each of the 4 characters as 3 bytes 110 | // 111 | outputBuffer[j] = (accumulated[0] << 2) | (accumulated[1] >> 4); 112 | outputBuffer[j + 1] = (accumulated[1] << 4) | (accumulated[2] >> 2); 113 | outputBuffer[j + 2] = (accumulated[2] << 6) | accumulated[3]; 114 | j += accumulateIndex - 1; 115 | } 116 | 117 | if (outputLength) 118 | { 119 | *outputLength = j; 120 | } 121 | return outputBuffer; 122 | } 123 | 124 | // 125 | // NewBase64Decode 126 | // 127 | // Encodes the arbitrary data in the inputBuffer as base64 into a newly malloced 128 | // output buffer. 129 | // 130 | // inputBuffer - the source data for the encode 131 | // length - the length of the input in bytes 132 | // separateLines - if zero, no CR/LF characters will be added. Otherwise 133 | // a CR/LF pair will be added every 64 encoded chars. 134 | // outputLength - if not-NULL, on output will contain the encoded length 135 | // (not including terminating 0 char) 136 | // 137 | // returns the encoded buffer. Must be free'd by caller. Length is given by 138 | // outputLength. 139 | // 140 | char *NewBase64Encode( 141 | const void *buffer, 142 | size_t length, 143 | bool separateLines, 144 | size_t *outputLength) 145 | { 146 | const unsigned char *inputBuffer = (const unsigned char *)buffer; 147 | 148 | #define MAX_NUM_PADDING_CHARS 2 149 | #define OUTPUT_LINE_LENGTH 64 150 | #define INPUT_LINE_LENGTH ((OUTPUT_LINE_LENGTH / BASE64_UNIT_SIZE) * BINARY_UNIT_SIZE) 151 | #define CR_LF_SIZE 2 152 | 153 | // 154 | // Byte accurate calculation of final buffer size 155 | // 156 | size_t outputBufferSize = 157 | ((length / BINARY_UNIT_SIZE) 158 | + ((length % BINARY_UNIT_SIZE) ? 1 : 0)) 159 | * BASE64_UNIT_SIZE; 160 | if (separateLines) 161 | { 162 | outputBufferSize += 163 | (outputBufferSize / OUTPUT_LINE_LENGTH) * CR_LF_SIZE; 164 | } 165 | 166 | // 167 | // Include space for a terminating zero 168 | // 169 | outputBufferSize += 1; 170 | 171 | // 172 | // Allocate the output buffer 173 | // 174 | char *outputBuffer = (char *)malloc(outputBufferSize); 175 | if (!outputBuffer) 176 | { 177 | return NULL; 178 | } 179 | 180 | size_t i = 0; 181 | size_t j = 0; 182 | const size_t lineLength = separateLines ? INPUT_LINE_LENGTH : length; 183 | size_t lineEnd = lineLength; 184 | 185 | while (true) 186 | { 187 | if (lineEnd > length) 188 | { 189 | lineEnd = length; 190 | } 191 | 192 | for (; i + BINARY_UNIT_SIZE - 1 < lineEnd; i += BINARY_UNIT_SIZE) 193 | { 194 | // 195 | // Inner loop: turn 48 bytes into 64 base64 characters 196 | // 197 | outputBuffer[j++] = base64EncodeLookup[(inputBuffer[i] & 0xFC) >> 2]; 198 | outputBuffer[j++] = base64EncodeLookup[((inputBuffer[i] & 0x03) << 4) 199 | | ((inputBuffer[i + 1] & 0xF0) >> 4)]; 200 | outputBuffer[j++] = base64EncodeLookup[((inputBuffer[i + 1] & 0x0F) << 2) 201 | | ((inputBuffer[i + 2] & 0xC0) >> 6)]; 202 | outputBuffer[j++] = base64EncodeLookup[inputBuffer[i + 2] & 0x3F]; 203 | } 204 | 205 | if (lineEnd == length) 206 | { 207 | break; 208 | } 209 | 210 | // 211 | // Add the newline 212 | // 213 | outputBuffer[j++] = '\r'; 214 | outputBuffer[j++] = '\n'; 215 | lineEnd += lineLength; 216 | } 217 | 218 | if (i + 1 < length) 219 | { 220 | // 221 | // Handle the single '=' case 222 | // 223 | outputBuffer[j++] = base64EncodeLookup[(inputBuffer[i] & 0xFC) >> 2]; 224 | outputBuffer[j++] = base64EncodeLookup[((inputBuffer[i] & 0x03) << 4) 225 | | ((inputBuffer[i + 1] & 0xF0) >> 4)]; 226 | outputBuffer[j++] = base64EncodeLookup[(inputBuffer[i + 1] & 0x0F) << 2]; 227 | outputBuffer[j++] = '='; 228 | } 229 | else if (i < length) 230 | { 231 | // 232 | // Handle the double '=' case 233 | // 234 | outputBuffer[j++] = base64EncodeLookup[(inputBuffer[i] & 0xFC) >> 2]; 235 | outputBuffer[j++] = base64EncodeLookup[(inputBuffer[i] & 0x03) << 4]; 236 | outputBuffer[j++] = '='; 237 | outputBuffer[j++] = '='; 238 | } 239 | outputBuffer[j] = 0; 240 | 241 | // 242 | // Set the output length and return the buffer 243 | // 244 | if (outputLength) 245 | { 246 | *outputLength = j; 247 | } 248 | return outputBuffer; 249 | } 250 | 251 | @implementation NSData (Base64) 252 | 253 | // 254 | // dataFromBase64String: 255 | // 256 | // Creates an NSData object containing the base64 decoded representation of 257 | // the base64 string 'aString' 258 | // 259 | // Parameters: 260 | // aString - the base64 string to decode 261 | // 262 | // returns the autoreleased NSData representation of the base64 string 263 | // 264 | + (NSData *)dataFromBase64String:(NSString *)aString 265 | { 266 | NSData *data = [aString dataUsingEncoding:NSASCIIStringEncoding]; 267 | size_t outputLength; 268 | void *outputBuffer = NewBase64Decode([data bytes], [data length], &outputLength); 269 | NSData *result = [NSData dataWithBytes:outputBuffer length:outputLength]; 270 | free(outputBuffer); 271 | return result; 272 | } 273 | 274 | // 275 | // base64EncodedString 276 | // 277 | // Creates an NSString object that contains the base 64 encoding of the 278 | // receiver's data. Lines are broken at 64 characters long. 279 | // 280 | // returns an autoreleased NSString being the base 64 representation of the 281 | // receiver. 282 | // 283 | - (NSString *)base64EncodedString 284 | { 285 | size_t outputLength; 286 | char *outputBuffer = 287 | NewBase64Encode([self bytes], [self length], true, &outputLength); 288 | 289 | NSString *result = 290 | [[[NSString alloc] 291 | initWithBytes:outputBuffer 292 | length:outputLength 293 | encoding:NSASCIIStringEncoding] 294 | autorelease]; 295 | free(outputBuffer); 296 | return result; 297 | } 298 | 299 | @end 300 | -------------------------------------------------------------------------------- /Classes/Foundation/NSString+FileSize.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+FileSize.h 3 | // LRToolkit 4 | // 5 | // Created by Luke Redpath on 22/05/2010. 6 | // 7 | // Taken from http://snippets.dzone.com/posts/show/3038 8 | // 9 | 10 | #import 11 | 12 | 13 | @interface NSString (FileSize) 14 | 15 | + (NSString *)fileSizeStringFromBytes:(int)bytes; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Classes/Foundation/NSString+FileSize.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+FileSize.m 3 | // LRToolkit 4 | // 5 | // Created by Luke Redpath on 22/05/2010. 6 | // 7 | // Taken from http://snippets.dzone.com/posts/show/3038 8 | // 9 | 10 | #import "NSString+FileSize.h" 11 | 12 | @implementation NSString (FileSize) 13 | 14 | + (NSString *)fileSizeStringFromBytes:(int)bytes; 15 | { 16 | float floatSize = (float)bytes; 17 | 18 | if (bytes<1023) 19 | return([NSString stringWithFormat:@"%d bytes",bytes]); 20 | floatSize = floatSize / 1024; 21 | if (floatSize<1023) 22 | return([NSString stringWithFormat:@"%1.1f KB",floatSize]); 23 | floatSize = floatSize / 1024; 24 | if (floatSize<1023) 25 | return([NSString stringWithFormat:@"%1.1f MB",floatSize]); 26 | floatSize = floatSize / 1024; 27 | 28 | return([NSString stringWithFormat:@"%1.1f GB",floatSize]); 29 | 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /Classes/Foundation/NSString+GHTimeInterval.h: -------------------------------------------------------------------------------- 1 | // 2 | // GHNSString+TimeInterval.h 3 | // 4 | // Created by Gabe on 6/6/08. 5 | // Copyright 2008 Gabriel Handford 6 | // 7 | // Permission is hereby granted, free of charge, to any person 8 | // obtaining a copy of this software and associated documentation 9 | // files (the "Software"), to deal in the Software without 10 | // restriction, including without limitation the rights to use, 11 | // copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | // copies of the Software, and to permit persons to whom the 13 | // Software is furnished to do so, subject to the following 14 | // conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be 17 | // included in all copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | // OTHER DEALINGS IN THE SOFTWARE. 27 | // 28 | 29 | 30 | @interface NSString (GHTimeInterval) 31 | 32 | /*! 33 | @method gh_stringForTimeInterval 34 | @abstract Get time ago in words 35 | @param interval 36 | @param includeSeconds If YES, will say 'less than N seconds', otherwise will show 'less than a minute' 37 | @result Time ago in words 38 | 39 | For localized values see the localization keys below. 40 | This method calls gh_localizedStringForTimeInterval with nil tableName and [NSBundle mainBundle] bundle. 41 | */ 42 | + (NSString *)gh_stringForTimeInterval:(NSTimeInterval)interval includeSeconds:(BOOL)includeSeconds; 43 | 44 | /*! 45 | Localized string for time interval. (Time ago in words.) 46 | @method gh_localizedStringForTimeInterval 47 | @abstract Get time ago in words 48 | @param interval 49 | @param includeSeconds If YES, will say 'less than N seconds', otherwise will show 'less than a minute' 50 | @param tableName Table name for localized string 51 | @param bundle Bundle for localized string 52 | @result Time ago in words 53 | 54 | These are the localized defaults, that you can override: 55 | 56 | LessThanAMinute = "less than a minute"; 57 | LessThanXSeconds = "less than %d seconds"; 58 | HalfMinute = "half a minute"; 59 | 1Minute = "1 minute"; 60 | XMinutes = "%.0f minutes"; 61 | About1Hour = "about 1 hour"; 62 | AboutXHours = "about %.0f hours"; 63 | 1Day = "1 day"; 64 | XDays = "%.0f days"; 65 | About1Month = "about 1 month"; 66 | XMonths = "%.0f months"; 67 | About1Year = "about 1 year"; 68 | OverXYears = "over %.0f years"; 69 | */ 70 | + (NSString *)gh_localizedStringForTimeInterval:(NSTimeInterval)interval includeSeconds:(BOOL)includeSeconds tableName:(NSString *)tableName bundle:(NSBundle *)bundle; 71 | 72 | + (NSString *)gh_stringForTimeSinceDate:(NSDate *)date includeSeconds:(BOOL)includeSeconds; 73 | 74 | @end -------------------------------------------------------------------------------- /Classes/Foundation/NSString+GHTimeInterval.m: -------------------------------------------------------------------------------- 1 | // 2 | // GHNSString+TimeInterval.m 3 | // 4 | // Created by Gabe on 6/6/08. 5 | // Copyright 2008 Gabriel Handford 6 | // 7 | // Permission is hereby granted, free of charge, to any person 8 | // obtaining a copy of this software and associated documentation 9 | // files (the "Software"), to deal in the Software without 10 | // restriction, including without limitation the rights to use, 11 | // copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | // copies of the Software, and to permit persons to whom the 13 | // Software is furnished to do so, subject to the following 14 | // conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be 17 | // included in all copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 21 | // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 23 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24 | // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 26 | // OTHER DEALINGS IN THE SOFTWARE. 27 | // 28 | 29 | #import "NSString+GHTimeInterval.h" 30 | 31 | #import 32 | 33 | @implementation NSString (GHTimeInterval) 34 | 35 | #define GHIntervalLocalize(key, defaultValue) NSLocalizedStringWithDefaultValue(key, tableName, bundle, defaultValue, nil) 36 | 37 | + (NSString *)gh_stringForTimeInterval:(NSTimeInterval)interval includeSeconds:(BOOL)includeSeconds { 38 | return [self gh_localizedStringForTimeInterval:interval includeSeconds:includeSeconds tableName:nil bundle:[NSBundle mainBundle]]; 39 | } 40 | 41 | + (NSString *)gh_localizedStringForTimeInterval:(NSTimeInterval)interval includeSeconds:(BOOL)includeSeconds tableName:(NSString *)tableName bundle:(NSBundle *)bundle { 42 | NSTimeInterval intervalInSeconds = fabs(interval); 43 | double intervalInMinutes = round(intervalInSeconds/60.0); 44 | 45 | if (intervalInMinutes >= 0 && intervalInMinutes <= 1) { 46 | if (!includeSeconds) return intervalInMinutes <= 0 ? GHIntervalLocalize(@"LessThanAMinute", @"less than a minute") : GHIntervalLocalize(@"1Minute", @"1 minute"); 47 | if (intervalInSeconds >= 0 && intervalInSeconds < 5) return [NSString stringWithFormat:GHIntervalLocalize(@"LessThanXSeconds", @"less than %d seconds"), 5]; 48 | else if (intervalInSeconds >= 5 && intervalInSeconds < 10) return [NSString stringWithFormat:GHIntervalLocalize(@"LessThanXSeconds", @"less than %d seconds"), 10]; 49 | else if (intervalInSeconds >= 10 && intervalInSeconds < 20) return [NSString stringWithFormat:GHIntervalLocalize(@"LessThanXSeconds", @"less than %d seconds"), 20]; 50 | else if (intervalInSeconds >= 20 && intervalInSeconds < 40) return GHIntervalLocalize(@"HalfMinute", @"half a minute"); 51 | else if (intervalInSeconds >= 40 && intervalInSeconds < 60) return GHIntervalLocalize(@"LessThanAMinute", @"less than a minute"); 52 | else return GHIntervalLocalize(@"1Minute", @"1 minute"); 53 | } 54 | else if (intervalInMinutes >= 2 && intervalInMinutes <= 44) return [NSString stringWithFormat:GHIntervalLocalize(@"XMinutes", @"%.0f minutes"), intervalInMinutes]; 55 | else if (intervalInMinutes >= 45 && intervalInMinutes <= 89) return GHIntervalLocalize(@"About1Hour", @"about 1 hour"); 56 | else if (intervalInMinutes >= 90 && intervalInMinutes <= 1439) return [NSString stringWithFormat:GHIntervalLocalize(@"AboutXHours", @"about %.0f hours"), round(intervalInMinutes/60.0)]; 57 | else if (intervalInMinutes >= 1440 && intervalInMinutes <= 2879) return GHIntervalLocalize(@"1Day", @"1 day"); 58 | else if (intervalInMinutes >= 2880 && intervalInMinutes <= 43199) return [NSString stringWithFormat:GHIntervalLocalize(@"XDays", @"%.0f days"), round(intervalInMinutes/1440.0)]; 59 | else if (intervalInMinutes >= 43200 && intervalInMinutes <= 86399) return GHIntervalLocalize(@"About1Month", @"about 1 month"); 60 | else if (intervalInMinutes >= 86400 && intervalInMinutes <= 525599) return [NSString stringWithFormat:GHIntervalLocalize(@"XMonths", @"%.0f months"), round(intervalInMinutes/43200.0)]; 61 | else if (intervalInMinutes >= 525600 && intervalInMinutes <= 1051199) return GHIntervalLocalize(@"About1Year", @"about 1 year"); 62 | else 63 | return [NSString stringWithFormat:GHIntervalLocalize(@"OverXYears", @"over %.0f years"), round(intervalInMinutes/525600.0)]; 64 | } 65 | 66 | + (NSString *)gh_stringForTimeSinceDate:(NSDate *)date includeSeconds:(BOOL)includeSeconds; 67 | { 68 | NSTimeInterval timeInterval = [[NSDate date] timeIntervalSinceDate:date]; 69 | return [self gh_stringForTimeInterval:timeInterval includeSeconds:includeSeconds]; 70 | } 71 | 72 | @end -------------------------------------------------------------------------------- /Classes/Foundation/NSString+Hashing.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Hashing.m 3 | // LRToolkit 4 | // 5 | // Created by Luke Redpath on 07/05/2009. 6 | // 7 | // Courtesy of Alistair McMillan 8 | // http://amcmillan.livejournal.com/155200.html 9 | // 10 | 11 | #import 12 | 13 | 14 | @interface NSString (Hashing) 15 | - (NSString *)MD5Hash; 16 | @end 17 | -------------------------------------------------------------------------------- /Classes/Foundation/NSString+Hashing.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Hashing.m 3 | // LRToolkit 4 | // 5 | // Created by Luke Redpath on 07/05/2009. 6 | // 7 | // Courtesy of Alistair McMillan 8 | // http://amcmillan.livejournal.com/155200.html 9 | // 10 | 11 | #import "NSString+Hashing.h" 12 | #import 13 | 14 | NSString* md5( NSString *str ) 15 | { 16 | const char *cStr = [str UTF8String]; 17 | unsigned char result[CC_MD5_DIGEST_LENGTH]; 18 | CC_MD5( cStr, strlen(cStr), result ); 19 | return [NSString stringWithFormat: 20 | @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", 21 | result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7], 22 | result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15] 23 | ]; 24 | } 25 | 26 | @implementation NSString (Hashing) 27 | 28 | - (NSString *)MD5Hash; 29 | { 30 | return md5(self); 31 | } 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /Classes/Foundation/NSURL+StringFormat.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSURL+StringFormat.h 3 | // LRToolkit 4 | // 5 | // Created by Luke Redpath on 01/05/2010. 6 | // Copyright 2010 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface NSURL (StringFormat) 13 | - (id)initWithFormat:(NSString *)formatString, ...; 14 | - (id)initWithFormat:(NSString *)formatString arguments:(va_list)args; 15 | + (id)URLWithFormat:(NSString *)formatString, ...; 16 | + (id)URLWithFormat:(NSString *)formatString relativeToURL:(NSURL *)baseURL, ...; 17 | @end 18 | -------------------------------------------------------------------------------- /Classes/Foundation/NSURL+StringFormat.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSURL+StringFormat.m 3 | // LRToolkit 4 | // 5 | // Created by Luke Redpath on 01/05/2010. 6 | // Copyright 2010 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import "NSURL+StringFormat.h" 10 | 11 | 12 | @implementation NSURL (StringFormat) 13 | 14 | - (id)initWithFormat:(NSString *)formatString, ...; 15 | { 16 | va_list args; 17 | va_start(args, formatString); 18 | self = [self initWithFormat:formatString arguments:args]; 19 | va_end(args); 20 | return self; 21 | } 22 | 23 | - (id)initWithFormat:(NSString *)formatString arguments:(va_list)args; 24 | { 25 | NSString *urlString = [[NSString alloc] initWithFormat:formatString arguments:args]; 26 | self = [self initWithString:urlString]; 27 | [urlString release]; 28 | return self; 29 | } 30 | 31 | + (id)URLWithFormat:(NSString *)formatString, ...; 32 | { 33 | va_list args; 34 | va_start(args, formatString); 35 | NSURL *url = [[self alloc] initWithFormat:formatString arguments:args]; 36 | va_end(args); 37 | return [url autorelease]; 38 | } 39 | 40 | + (id)URLWithFormat:(NSString *)formatString relativeToURL:(NSURL *)baseURL, ...; 41 | { 42 | va_list args; 43 | va_start(args, baseURL); 44 | NSString *path = [[NSString alloc] initWithFormat:formatString arguments:args]; 45 | NSURL *url = [self URLWithString:path relativeToURL:baseURL]; 46 | [path release]; 47 | va_end(args); 48 | return url; 49 | } 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /Classes/UIKit/LRPopoverManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // LRPopoverManager.h 3 | // Spark 4 | // 5 | // Created by Luke Redpath on 24/05/2010. 6 | // Copyright 2010 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | extern NSString *const LRUIPopoverControllerDidDismissNotification; 12 | 13 | @interface LRPopoverManager : NSObject { 14 | UIPopoverController *currentPopoverController; 15 | BOOL permitCurrentPopoverControllerToDismiss; 16 | } 17 | @property (nonatomic, retain) UIPopoverController *currentPopoverController; 18 | @property (nonatomic, assign) BOOL permitCurrentPopoverControllerToDismiss; 19 | 20 | + (id)sharedManager; 21 | 22 | - (void)presentPopoverController:(UIPopoverController *)pc fromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated; 23 | - (void)presentPopoverController:(UIPopoverController *)pc fromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated; 24 | 25 | - (void)presentControllerInPopoverController:(UIViewController *)vc fromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated; 26 | - (void)presentControllerInPopoverController:(UIViewController *)vc fromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated; 27 | 28 | - (void)presentControllerWithNavigationInPopoverController:(UIViewController *)vc fromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated; 29 | - (void)presentControllerWithNavigationInPopoverController:(UIViewController *)vc fromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated; 30 | 31 | - (void)dismissCurrentPopoverController:(BOOL)animated; 32 | @end 33 | -------------------------------------------------------------------------------- /Classes/UIKit/LRPopoverManager.m: -------------------------------------------------------------------------------- 1 | // 2 | // LRPopoverManager.m 3 | // Spark 4 | // 5 | // Created by Luke Redpath on 24/05/2010. 6 | // Copyright 2010 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import "LRPopoverManager.h" 10 | 11 | 12 | NSString *const LRUIPopoverControllerDidDismissNotification = @"LRUIPopoverControllerDidDismissNotification"; 13 | 14 | @implementation LRPopoverManager 15 | 16 | @synthesize currentPopoverController; 17 | @synthesize permitCurrentPopoverControllerToDismiss; 18 | 19 | static LRPopoverManager *sharedManager = nil; 20 | 21 | + (void)initialize { 22 | if (self == [LRPopoverManager class]) { 23 | sharedManager = [[self alloc] init]; 24 | sharedManager.permitCurrentPopoverControllerToDismiss = YES; 25 | } 26 | } 27 | 28 | + (id)sharedManager { 29 | return sharedManager; 30 | } 31 | 32 | - (void)setCurrentPopoverController:(UIPopoverController *)pc 33 | { 34 | [self dismissCurrentPopoverController:YES]; 35 | 36 | if (pc != currentPopoverController) { 37 | [currentPopoverController release]; 38 | currentPopoverController = [pc retain]; 39 | currentPopoverController.delegate = self; 40 | } 41 | self.permitCurrentPopoverControllerToDismiss = YES; 42 | } 43 | 44 | - (void)presentPopoverController:(UIPopoverController *)pc fromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated 45 | { 46 | self.currentPopoverController = pc; 47 | [self.currentPopoverController presentPopoverFromRect:rect inView:view permittedArrowDirections:arrowDirections animated:animated]; 48 | } 49 | 50 | - (void)presentPopoverController:(UIPopoverController *)pc fromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated 51 | { 52 | self.currentPopoverController = pc; 53 | [self.currentPopoverController presentPopoverFromBarButtonItem:item permittedArrowDirections:arrowDirections animated:animated]; 54 | } 55 | 56 | - (void)dismissCurrentPopoverController:(BOOL)animated; 57 | { 58 | [self.currentPopoverController dismissPopoverAnimated:animated]; 59 | } 60 | 61 | - (void)presentControllerInPopoverController:(UIViewController *)vc fromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated; 62 | { 63 | UIPopoverController *pc = [[UIPopoverController alloc] initWithContentViewController:vc]; 64 | [self presentPopoverController:pc fromRect:rect inView:view permittedArrowDirections:arrowDirections animated:animated]; 65 | [pc release]; 66 | } 67 | 68 | - (void)presentControllerInPopoverController:(UIViewController *)vc fromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated; 69 | { 70 | UIPopoverController *pc = [[UIPopoverController alloc] initWithContentViewController:vc]; 71 | [self presentPopoverController:pc fromBarButtonItem:item permittedArrowDirections:arrowDirections animated:animated]; 72 | [pc release]; 73 | } 74 | 75 | - (void)presentControllerWithNavigationInPopoverController:(UIViewController *)vc fromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated; 76 | { 77 | UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:vc]; 78 | [self presentControllerInPopoverController:navigationController fromRect:rect inView:view permittedArrowDirections:arrowDirections animated:animated]; 79 | [navigationController release]; 80 | } 81 | 82 | - (void)presentControllerWithNavigationInPopoverController:(UIViewController *)vc fromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated; 83 | { 84 | UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:vc]; 85 | [self presentControllerInPopoverController:navigationController fromBarButtonItem:item permittedArrowDirections:arrowDirections animated:animated]; 86 | [navigationController release]; 87 | } 88 | 89 | #pragma mark - 90 | #pragma mark UIPopoverControllerDelegate methods 91 | 92 | - (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController 93 | { 94 | [[NSNotificationCenter defaultCenter] postNotificationName:LRUIPopoverControllerDidDismissNotification object:popoverController]; 95 | } 96 | 97 | - (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController 98 | { 99 | return self.permitCurrentPopoverControllerToDismiss; 100 | } 101 | 102 | @end 103 | -------------------------------------------------------------------------------- /Classes/UIKit/LRTableViewCollection.h: -------------------------------------------------------------------------------- 1 | // 2 | // LRTableViewCollection.h 3 | // TellYouGov 4 | // 5 | // Created by Luke Redpath on 19/04/2010. 6 | // Copyright 2010 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface LRTableViewCollection : NSObject { 13 | NSMutableArray *objects; 14 | NSArray *indexedObjects; 15 | NSArray *filteredObjects; 16 | UILocalizedIndexedCollation *collation; 17 | SEL indexSelector; 18 | NSArray *sortDescriptors; 19 | NSPredicate *filterPredicate; 20 | } 21 | @property (nonatomic, copy) NSArray *objects; 22 | @property (nonatomic, retain) UILocalizedIndexedCollation *collation; 23 | @property (nonatomic, assign) SEL indexSelector; 24 | @property (nonatomic, copy) NSArray *sortDescriptors; 25 | @property (nonatomic, retain) NSPredicate *filterPredicate; 26 | @property (nonatomic, readonly) NSInteger sectionCount; 27 | 28 | - (NSInteger)numberOfRowsInSection:(NSInteger)section; 29 | - (id)objectAtIndexPath:(NSIndexPath *)indexPath; 30 | - (NSIndexPath *)indexPathForObject:(id)object; 31 | - (NSIndexPath *)insertObject:(id)object atIndex:(NSInteger)index; 32 | - (NSArray *)appendObjects:(NSArray *)moreObjects; 33 | - (NSIndexPath *)insertObject:(id)object; 34 | - (NSIndexPath *)removeObject:(id)object; 35 | - (void)clear; 36 | @end 37 | -------------------------------------------------------------------------------- /Classes/UIKit/LRTableViewCollection.m: -------------------------------------------------------------------------------- 1 | // 2 | // LRTableViewCollection.m 3 | // TellYouGov 4 | // 5 | // Created by Luke Redpath on 19/04/2010. 6 | // Copyright 2010 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import "LRTableViewCollection.h" 10 | #import "NSArray+Indexing.h" 11 | 12 | @implementation LRTableViewCollection 13 | 14 | @synthesize objects; 15 | @synthesize collation; 16 | @synthesize indexSelector; 17 | @synthesize sortDescriptors; 18 | @synthesize filterPredicate; 19 | @dynamic sectionCount; 20 | 21 | - (void)dealloc { 22 | [sortDescriptors release]; 23 | [objects release]; 24 | [indexedObjects release]; 25 | [filteredObjects release]; 26 | [collation release]; 27 | [filterPredicate release]; 28 | [super dealloc]; 29 | } 30 | 31 | - (id)init; 32 | { 33 | if (self = [super init]) { 34 | objects = [[NSMutableArray alloc] init]; 35 | } 36 | return self; 37 | } 38 | 39 | - (void)clear; 40 | { 41 | [objects release]; 42 | objects = [[NSMutableArray alloc] init]; 43 | } 44 | 45 | - (void)setObjects:(NSArray *)array; 46 | { 47 | [objects release]; objects = [array mutableCopy]; 48 | 49 | if (self.collation) { 50 | indexedObjects = [[objects indexUsingCollation:self.collation withSelector:indexSelector] retain]; 51 | } 52 | if (self.sortDescriptors) { 53 | [objects sortUsingDescriptors:self.sortDescriptors]; 54 | } 55 | } 56 | 57 | - (NSIndexPath *)insertObject:(id)object atIndex:(NSInteger)index; 58 | { 59 | [objects insertObject:object atIndex:index]; 60 | 61 | if (self.collation) { 62 | indexedObjects = [[objects indexUsingCollation:self.collation withSelector:indexSelector] retain]; 63 | } 64 | if (self.sortDescriptors) { 65 | [objects sortUsingDescriptors:self.sortDescriptors]; 66 | } 67 | 68 | return [self indexPathForObject:object]; 69 | } 70 | 71 | - (NSArray *)appendObjects:(NSArray *)moreObjects; 72 | { 73 | self.objects = [objects arrayByAddingObjectsFromArray:moreObjects]; 74 | 75 | NSMutableArray *indexPaths = [NSMutableArray array]; 76 | for (id object in moreObjects) { 77 | [indexPaths addObject:[self indexPathForObject:object]]; 78 | } 79 | return indexPaths; 80 | } 81 | 82 | - (NSIndexPath *)insertObject:(id)object; 83 | { 84 | [objects addObject:object]; 85 | 86 | if (self.collation) { 87 | indexedObjects = [[objects indexUsingCollation:self.collation withSelector:indexSelector] retain]; 88 | } 89 | if (self.sortDescriptors) { 90 | [objects sortUsingDescriptors:self.sortDescriptors]; 91 | } 92 | return [self indexPathForObject:object]; 93 | } 94 | 95 | - (NSIndexPath *)removeObject:(id)object; 96 | { 97 | NSIndexPath *indexPath = [self indexPathForObject:object]; 98 | 99 | [objects removeObject:object]; 100 | 101 | if (self.collation) { 102 | indexedObjects = [[objects indexUsingCollation:self.collation withSelector:indexSelector] retain]; 103 | } 104 | return indexPath; 105 | } 106 | 107 | - (void)setFilterPredicate:(NSPredicate *)predicate; 108 | { 109 | if (predicate != filterPredicate) { 110 | [filterPredicate release]; filterPredicate = [predicate retain]; 111 | 112 | if (filterPredicate == nil) { 113 | [filteredObjects release]; filteredObjects = nil; 114 | } else { 115 | filteredObjects = [[self.objects filteredArrayUsingPredicate:self.filterPredicate] retain]; 116 | } 117 | } 118 | } 119 | 120 | #pragma mark - 121 | #pragma mark Dynamic collection properties 122 | 123 | - (NSInteger)sectionCount; 124 | { 125 | if (self.filterPredicate == nil && indexedObjects != nil) { 126 | return [indexedObjects count]; 127 | } 128 | return 1; 129 | } 130 | 131 | - (NSInteger)numberOfRowsInSection:(NSInteger)section; 132 | { 133 | if (self.filterPredicate) { 134 | return [filteredObjects count]; 135 | } else if (indexedObjects != nil) { 136 | return [[indexedObjects objectAtIndex:section] count]; 137 | } 138 | return [objects count]; 139 | } 140 | 141 | - (id)objectAtIndexPath:(NSIndexPath *)indexPath; 142 | { 143 | if (self.filterPredicate) { 144 | return [filteredObjects objectAtIndex:indexPath.row]; 145 | } else if (indexedObjects != nil) { 146 | return [[indexedObjects objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]; 147 | } 148 | return [objects objectAtIndex:indexPath.row]; 149 | } 150 | 151 | - (NSIndexPath *)indexPathForObject:(id)object; 152 | { 153 | if (self.filterPredicate) { 154 | return [NSIndexPath indexPathForRow:[self.objects indexOfObject:object] inSection:0]; 155 | } else if (indexedObjects != nil) { 156 | NSInteger section = [self.collation sectionForObject:object collationStringSelector:indexSelector]; 157 | NSArray *sectionObjects = [indexedObjects objectAtIndex:section]; 158 | return [NSIndexPath indexPathForRow:[sectionObjects indexOfObject:object] inSection:section]; 159 | } 160 | return [NSIndexPath indexPathForRow:[self.objects indexOfObject:object] inSection:0]; 161 | } 162 | 163 | @end 164 | -------------------------------------------------------------------------------- /Classes/UIKit/LRUIColorPallette.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIColorPallette.h 3 | // LRToolkit 4 | // 5 | // Created by Luke Redpath on 20/06/2010. 6 | // Copyright 2010 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface LRUIColorPallette : NSObject { 13 | NSMutableDictionary *colors; 14 | } 15 | - (void)setColor:(UIColor *)color forName:(NSString *)name; 16 | - (UIColor *)colorForName:(NSString *)name; 17 | @end 18 | -------------------------------------------------------------------------------- /Classes/UIKit/LRUIColorPallette.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIColorPallette.m 3 | // LRToolkit 4 | // 5 | // Created by Luke Redpath on 20/06/2010. 6 | // Copyright 2010 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import "LRUIColorPallette.h" 10 | 11 | 12 | @implementation LRUIColorPallette 13 | 14 | - (id)init; 15 | { 16 | if (self = [super init]) { 17 | colors = [[NSMutableDictionary alloc] init]; 18 | } 19 | return self; 20 | } 21 | 22 | - (void)dealloc; 23 | { 24 | [colors release]; 25 | [super dealloc]; 26 | } 27 | 28 | - (void)setColor:(UIColor *)color forName:(NSString *)name; 29 | { 30 | [colors setObject:color forKey:name]; 31 | } 32 | 33 | - (UIColor *)colorForName:(NSString *)name; 34 | { 35 | return [colors objectForKey:name]; 36 | } 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /Classes/UIKit/UIColor+Hex.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIColor+Hex.h 3 | // LRToolkit 4 | // 5 | // Created by Luke Redpath on 27/04/2010. 6 | // Copyright 2010 LJR Software Limited. All rights reserved. 7 | // 8 | // Based on code from 9 | // http://pessoal.org/blog/2008/11/27/creating-uicolor-objects-from-hex-values/ 10 | 11 | #import 12 | 13 | 14 | @interface UIColor (Hex) 15 | 16 | + (UIColor *)colorWithHexValue:(int)hexValue; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Classes/UIKit/UIColor+Hex.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIColor+Hex.m 3 | // LRToolkit 4 | // 5 | // Created by Luke Redpath on 27/04/2010. 6 | // Copyright 2010 LJR Software Limited. All rights reserved. 7 | // 8 | // Based on code from 9 | // http://pessoal.org/blog/2008/11/27/creating-uicolor-objects-from-hex-values/ 10 | 11 | #import "UIColor+Hex.h" 12 | 13 | @implementation UIColor (Hex) 14 | 15 | + (UIColor *)colorWithHexValue:(int)rgbValue; 16 | { 17 | return [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 18 | green:((float)((rgbValue & 0xFF00) >> 8))/255.0 19 | blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]; 20 | } 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Classes/UIKit/UIColor+SharedPallette.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIColor+SharedPallette.h 3 | // LRToolkit 4 | // 5 | // Created by Luke Redpath on 20/06/2010. 6 | // Copyright 2010 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class LRUIColorPallette; 12 | 13 | @interface UIColor (SharedPallette) 14 | 15 | + (LRUIColorPallette *)sharedPallette; 16 | + (void)registerPalletteColorsUsingHexValuesFromDictionary:(NSDictionary *)palletteDictionary; 17 | + (void)registerPalletteColorsUsingHexValuesFromFile:(NSString *)fileName; 18 | + (void)registerPalletteColor:(UIColor *)color name:(NSString *)name; 19 | + (UIColor *)palletteColorNamed:(NSString *)name; 20 | - (void)registerWithSharedPalletteUsingName:(NSString *)name; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Classes/UIKit/UIColor+SharedPallette.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIColor+SharedPallette.m 3 | // LRToolkit 4 | // 5 | // Created by Luke Redpath on 20/06/2010. 6 | // Copyright 2010 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import "UIColor+SharedPallette.h" 10 | #import "LRUIColorPallette.h" 11 | #import "UIColor+Hex.h" 12 | #import "LRFoundationMacros.h" 13 | 14 | @implementation UIColor (SharedPallette) 15 | 16 | static LRUIColorPallette *lr_sharedUIColorPallette = nil; 17 | 18 | + (LRUIColorPallette *)sharedPallette; 19 | { 20 | if (lr_sharedUIColorPallette == nil) { 21 | lr_sharedUIColorPallette = [[LRUIColorPallette alloc] init]; 22 | } 23 | return lr_sharedUIColorPallette; 24 | } 25 | 26 | /* 27 | * Registers colors from a dictionary of Name => Hex values 28 | * e.g. 29 | * [NSDictionary 30 | dictionaryWithObjects:[NSArray arrayWithObjects:LR_NSNUM(0xFFFFFF), LR_NSNUM(0x000000), nil] 31 | forKeys:[NSArray arrayWithObjects:@"White", @"Black", nil]]; 32 | */ 33 | + (void)registerPalletteColorsUsingHexValuesFromDictionary:(NSDictionary *)palletteDictionary; 34 | { 35 | for (NSString *colorName in [palletteDictionary allKeys]) { 36 | int hexValue = [[palletteDictionary objectForKey:colorName] intValue]; 37 | [[self colorWithHexValue:hexValue] registerWithSharedPalletteUsingName:colorName]; 38 | } 39 | } 40 | 41 | /* 42 | * Uses the same dictionary format as above but loaded from a plist file 43 | */ 44 | + (void)registerPalletteColorsUsingHexValuesFromFile:(NSString *)fileName; 45 | { 46 | NSDictionary *palletteDictionary = [NSDictionary dictionaryWithContentsOfFile:fileName]; 47 | if (palletteDictionary) { 48 | [self registerPalletteColorsUsingHexValuesFromDictionary:palletteDictionary]; 49 | } 50 | } 51 | 52 | + (void)registerPalletteColor:(UIColor *)color name:(NSString *)name; 53 | { 54 | [[self sharedPallette] setColor:color forName:name]; 55 | } 56 | 57 | + (UIColor *)palletteColorNamed:(NSString *)name; 58 | { 59 | return [[self sharedPallette] colorForName:name]; 60 | } 61 | 62 | - (void)registerWithSharedPalletteUsingName:(NSString *)name; 63 | { 64 | [[self class] registerPalletteColor:self name:name]; 65 | } 66 | 67 | @end 68 | -------------------------------------------------------------------------------- /Classes/UIKit/UIImage+Alpha.h: -------------------------------------------------------------------------------- 1 | // UIImage+Alpha.h 2 | // Created by Trevor Harmon on 9/20/09. 3 | // Free for personal or commercial use, with or without modification. 4 | // No warranty is expressed or implied. 5 | 6 | #import 7 | 8 | // Helper methods for adding an alpha layer to an image 9 | @interface UIImage (Alpha) 10 | - (BOOL)hasAlpha; 11 | - (UIImage *)imageWithAlpha; 12 | - (UIImage *)transparentBorderImage:(NSUInteger)borderSize; 13 | @end 14 | -------------------------------------------------------------------------------- /Classes/UIKit/UIImage+Alpha.m: -------------------------------------------------------------------------------- 1 | // UIImage+Alpha.m 2 | // Created by Trevor Harmon on 9/20/09. 3 | // Free for personal or commercial use, with or without modification. 4 | // No warranty is expressed or implied. 5 | 6 | #import "UIImage+Alpha.h" 7 | 8 | // Private helper methods 9 | @interface UIImage () 10 | - (CGImageRef)newBorderMask:(NSUInteger)borderSize size:(CGSize)size; 11 | @end 12 | 13 | @implementation UIImage (Alpha) 14 | 15 | // Returns true if the image has an alpha layer 16 | - (BOOL)hasAlpha { 17 | CGImageAlphaInfo alpha = CGImageGetAlphaInfo(self.CGImage); 18 | return (alpha == kCGImageAlphaFirst || 19 | alpha == kCGImageAlphaLast || 20 | alpha == kCGImageAlphaPremultipliedFirst || 21 | alpha == kCGImageAlphaPremultipliedLast); 22 | } 23 | 24 | // Returns a copy of the given image, adding an alpha channel if it doesn't already have one 25 | - (UIImage *)imageWithAlpha { 26 | if ([self hasAlpha]) { 27 | return self; 28 | } 29 | 30 | CGImageRef imageRef = self.CGImage; 31 | size_t width = CGImageGetWidth(imageRef); 32 | size_t height = CGImageGetHeight(imageRef); 33 | 34 | // The bitsPerComponent and bitmapInfo values are hard-coded to prevent an "unsupported parameter combination" error 35 | CGContextRef offscreenContext = CGBitmapContextCreate(NULL, 36 | width, 37 | height, 38 | 8, 39 | 0, 40 | CGImageGetColorSpace(imageRef), 41 | kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst); 42 | 43 | // Draw the image into the context and retrieve the new image, which will now have an alpha layer 44 | CGContextDrawImage(offscreenContext, CGRectMake(0, 0, width, height), imageRef); 45 | CGImageRef imageRefWithAlpha = CGBitmapContextCreateImage(offscreenContext); 46 | UIImage *imageWithAlpha = [UIImage imageWithCGImage:imageRefWithAlpha]; 47 | 48 | // Clean up 49 | CGContextRelease(offscreenContext); 50 | CGImageRelease(imageRefWithAlpha); 51 | 52 | return imageWithAlpha; 53 | } 54 | 55 | // Returns a copy of the image with a transparent border of the given size added around its edges. 56 | // If the image has no alpha layer, one will be added to it. 57 | - (UIImage *)transparentBorderImage:(NSUInteger)borderSize { 58 | // If the image does not have an alpha layer, add one 59 | UIImage *image = [self imageWithAlpha]; 60 | 61 | CGRect newRect = CGRectMake(0, 0, image.size.width + borderSize * 2, image.size.height + borderSize * 2); 62 | 63 | // Build a context that's the same dimensions as the new size 64 | CGContextRef bitmap = CGBitmapContextCreate(NULL, 65 | newRect.size.width, 66 | newRect.size.height, 67 | CGImageGetBitsPerComponent(self.CGImage), 68 | 0, 69 | CGImageGetColorSpace(self.CGImage), 70 | CGImageGetBitmapInfo(self.CGImage)); 71 | 72 | // Draw the image in the center of the context, leaving a gap around the edges 73 | CGRect imageLocation = CGRectMake(borderSize, borderSize, image.size.width, image.size.height); 74 | CGContextDrawImage(bitmap, imageLocation, self.CGImage); 75 | CGImageRef borderImageRef = CGBitmapContextCreateImage(bitmap); 76 | 77 | // Create a mask to make the border transparent, and combine it with the image 78 | CGImageRef maskImageRef = [self newBorderMask:borderSize size:newRect.size]; 79 | CGImageRef transparentBorderImageRef = CGImageCreateWithMask(borderImageRef, maskImageRef); 80 | UIImage *transparentBorderImage = [UIImage imageWithCGImage:transparentBorderImageRef]; 81 | 82 | // Clean up 83 | CGContextRelease(bitmap); 84 | CGImageRelease(borderImageRef); 85 | CGImageRelease(maskImageRef); 86 | CGImageRelease(transparentBorderImageRef); 87 | 88 | return transparentBorderImage; 89 | } 90 | 91 | #pragma mark - 92 | #pragma mark Private helper methods 93 | 94 | // Creates a mask that makes the outer edges transparent and everything else opaque 95 | // The size must include the entire mask (opaque part + transparent border) 96 | // The caller is responsible for releasing the returned reference by calling CGImageRelease 97 | - (CGImageRef)newBorderMask:(NSUInteger)borderSize size:(CGSize)size { 98 | CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); 99 | 100 | // Build a context that's the same dimensions as the new size 101 | CGContextRef maskContext = CGBitmapContextCreate(NULL, 102 | size.width, 103 | size.height, 104 | 8, // 8-bit grayscale 105 | 0, 106 | colorSpace, 107 | kCGBitmapByteOrderDefault | kCGImageAlphaNone); 108 | 109 | // Start with a mask that's entirely transparent 110 | CGContextSetFillColorWithColor(maskContext, [UIColor blackColor].CGColor); 111 | CGContextFillRect(maskContext, CGRectMake(0, 0, size.width, size.height)); 112 | 113 | // Make the inner part (within the border) opaque 114 | CGContextSetFillColorWithColor(maskContext, [UIColor whiteColor].CGColor); 115 | CGContextFillRect(maskContext, CGRectMake(borderSize, borderSize, size.width - borderSize * 2, size.height - borderSize * 2)); 116 | 117 | // Get an image of the context 118 | CGImageRef maskImageRef = CGBitmapContextCreateImage(maskContext); 119 | 120 | // Clean up 121 | CGContextRelease(maskContext); 122 | CGColorSpaceRelease(colorSpace); 123 | 124 | return maskImageRef; 125 | } 126 | 127 | @end 128 | -------------------------------------------------------------------------------- /Classes/UIKit/UIImage+Resize.h: -------------------------------------------------------------------------------- 1 | // UIImage+Resize.h 2 | // Created by Trevor Harmon on 8/5/09. 3 | // Free for personal or commercial use, with or without modification. 4 | // No warranty is expressed or implied. 5 | 6 | #import 7 | 8 | // Extends the UIImage class to support resizing/cropping 9 | @interface UIImage (Resize) 10 | - (UIImage *)croppedImage:(CGRect)bounds; 11 | - (UIImage *)thumbnailImage:(NSInteger)thumbnailSize 12 | transparentBorder:(NSUInteger)borderSize 13 | cornerRadius:(NSUInteger)cornerRadius 14 | interpolationQuality:(CGInterpolationQuality)quality; 15 | - (UIImage *)resizedImage:(CGSize)newSize 16 | interpolationQuality:(CGInterpolationQuality)quality; 17 | - (UIImage *)resizedImageWithContentMode:(UIViewContentMode)contentMode 18 | bounds:(CGSize)bounds 19 | interpolationQuality:(CGInterpolationQuality)quality; 20 | @end 21 | -------------------------------------------------------------------------------- /Classes/UIKit/UIImage+Resize.m: -------------------------------------------------------------------------------- 1 | // UIImage+Resize.m 2 | // Created by Trevor Harmon on 8/5/09. 3 | // Free for personal or commercial use, with or without modification. 4 | // No warranty is expressed or implied. 5 | 6 | #import "UIImage+Resize.h" 7 | #import "UIImage+RoundedCorner.h" 8 | #import "UIImage+Alpha.h" 9 | 10 | // Private helper methods 11 | @interface UIImage () 12 | - (UIImage *)resizedImage:(CGSize)newSize 13 | transform:(CGAffineTransform)transform 14 | drawTransposed:(BOOL)transpose 15 | interpolationQuality:(CGInterpolationQuality)quality; 16 | - (CGAffineTransform)transformForOrientation:(CGSize)newSize; 17 | @end 18 | 19 | @implementation UIImage (Resize) 20 | 21 | // Returns a copy of this image that is cropped to the given bounds. 22 | // The bounds will be adjusted using CGRectIntegral. 23 | // This method ignores the image's imageOrientation setting. 24 | - (UIImage *)croppedImage:(CGRect)bounds { 25 | CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], bounds); 26 | UIImage *croppedImage = [UIImage imageWithCGImage:imageRef]; 27 | CGImageRelease(imageRef); 28 | return croppedImage; 29 | } 30 | 31 | // Returns a copy of this image that is squared to the thumbnail size. 32 | // If transparentBorder is non-zero, a transparent border of the given size will be added around the edges of the thumbnail. (Adding a transparent border of at least one pixel in size has the side-effect of antialiasing the edges of the image when rotating it using Core Animation.) 33 | - (UIImage *)thumbnailImage:(NSInteger)thumbnailSize 34 | transparentBorder:(NSUInteger)borderSize 35 | cornerRadius:(NSUInteger)cornerRadius 36 | interpolationQuality:(CGInterpolationQuality)quality { 37 | UIImage *resizedImage = [self resizedImageWithContentMode:UIViewContentModeScaleAspectFill 38 | bounds:CGSizeMake(thumbnailSize, thumbnailSize) 39 | interpolationQuality:quality]; 40 | 41 | // Crop out any part of the image that's larger than the thumbnail size 42 | // The cropped rect must be centered on the resized image 43 | // Round the origin points so that the size isn't altered when CGRectIntegral is later invoked 44 | CGRect cropRect = CGRectMake(round((resizedImage.size.width - thumbnailSize) / 2), 45 | round((resizedImage.size.height - thumbnailSize) / 2), 46 | thumbnailSize, 47 | thumbnailSize); 48 | UIImage *croppedImage = [resizedImage croppedImage:cropRect]; 49 | 50 | UIImage *transparentBorderImage = borderSize ? [croppedImage transparentBorderImage:borderSize] : croppedImage; 51 | 52 | return [transparentBorderImage roundedCornerImage:cornerRadius borderSize:borderSize]; 53 | } 54 | 55 | // Returns a rescaled copy of the image, taking into account its orientation 56 | // The image will be scaled disproportionately if necessary to fit the bounds specified by the parameter 57 | - (UIImage *)resizedImage:(CGSize)newSize interpolationQuality:(CGInterpolationQuality)quality { 58 | BOOL drawTransposed; 59 | 60 | switch (self.imageOrientation) { 61 | case UIImageOrientationLeft: 62 | case UIImageOrientationLeftMirrored: 63 | case UIImageOrientationRight: 64 | case UIImageOrientationRightMirrored: 65 | drawTransposed = YES; 66 | break; 67 | 68 | default: 69 | drawTransposed = NO; 70 | } 71 | 72 | return [self resizedImage:newSize 73 | transform:[self transformForOrientation:newSize] 74 | drawTransposed:drawTransposed 75 | interpolationQuality:quality]; 76 | } 77 | 78 | // Resizes the image according to the given content mode, taking into account the image's orientation 79 | - (UIImage *)resizedImageWithContentMode:(UIViewContentMode)contentMode 80 | bounds:(CGSize)bounds 81 | interpolationQuality:(CGInterpolationQuality)quality { 82 | CGFloat horizontalRatio = bounds.width / self.size.width; 83 | CGFloat verticalRatio = bounds.height / self.size.height; 84 | CGFloat ratio; 85 | 86 | switch (contentMode) { 87 | case UIViewContentModeScaleAspectFill: 88 | ratio = MAX(horizontalRatio, verticalRatio); 89 | break; 90 | 91 | case UIViewContentModeScaleAspectFit: 92 | ratio = MIN(horizontalRatio, verticalRatio); 93 | break; 94 | 95 | default: 96 | [NSException raise:NSInvalidArgumentException format:@"Unsupported content mode: %d", contentMode]; 97 | } 98 | 99 | CGSize newSize = CGSizeMake(self.size.width * ratio, self.size.height * ratio); 100 | 101 | return [self resizedImage:newSize interpolationQuality:quality]; 102 | } 103 | 104 | #pragma mark - 105 | #pragma mark Private helper methods 106 | 107 | // Returns a copy of the image that has been transformed using the given affine transform and scaled to the new size 108 | // The new image's orientation will be UIImageOrientationUp, regardless of the current image's orientation 109 | // If the new size is not integral, it will be rounded up 110 | - (UIImage *)resizedImage:(CGSize)newSize 111 | transform:(CGAffineTransform)transform 112 | drawTransposed:(BOOL)transpose 113 | interpolationQuality:(CGInterpolationQuality)quality { 114 | CGRect newRect = CGRectIntegral(CGRectMake(0, 0, newSize.width, newSize.height)); 115 | CGRect transposedRect = CGRectMake(0, 0, newRect.size.height, newRect.size.width); 116 | CGImageRef imageRef = self.CGImage; 117 | 118 | // fix for non-supported bits/channel combinations 119 | CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); 120 | if (CGImageGetAlphaInfo(imageRef) == kCGImageAlphaNone) { 121 | bitmapInfo &= ~kCGBitmapAlphaInfoMask; 122 | bitmapInfo |= kCGImageAlphaNoneSkipLast; 123 | } 124 | 125 | // Build a context that's the same dimensions as the new size 126 | CGContextRef bitmap = CGBitmapContextCreate(NULL, 127 | newRect.size.width, 128 | newRect.size.height, 129 | CGImageGetBitsPerComponent(imageRef), 130 | 0, 131 | CGImageGetColorSpace(imageRef), 132 | bitmapInfo); 133 | 134 | // Rotate and/or flip the image if required by its orientation 135 | CGContextConcatCTM(bitmap, transform); 136 | 137 | // Set the quality level to use when rescaling 138 | CGContextSetInterpolationQuality(bitmap, quality); 139 | 140 | // Draw into the context; this scales the image 141 | CGContextDrawImage(bitmap, transpose ? transposedRect : newRect, imageRef); 142 | 143 | // Get the resized image from the context and a UIImage 144 | CGImageRef newImageRef = CGBitmapContextCreateImage(bitmap); 145 | UIImage *newImage = [UIImage imageWithCGImage:newImageRef]; 146 | 147 | // Clean up 148 | CGContextRelease(bitmap); 149 | CGImageRelease(newImageRef); 150 | 151 | return newImage; 152 | } 153 | 154 | // Returns an affine transform that takes into account the image orientation when drawing a scaled image 155 | - (CGAffineTransform)transformForOrientation:(CGSize)newSize { 156 | CGAffineTransform transform = CGAffineTransformIdentity; 157 | 158 | switch (self.imageOrientation) { 159 | case UIImageOrientationDown: // EXIF = 3 160 | case UIImageOrientationDownMirrored: // EXIF = 4 161 | transform = CGAffineTransformTranslate(transform, newSize.width, newSize.height); 162 | transform = CGAffineTransformRotate(transform, M_PI); 163 | break; 164 | 165 | case UIImageOrientationLeft: // EXIF = 6 166 | case UIImageOrientationLeftMirrored: // EXIF = 5 167 | transform = CGAffineTransformTranslate(transform, newSize.width, 0); 168 | transform = CGAffineTransformRotate(transform, M_PI_2); 169 | break; 170 | 171 | case UIImageOrientationRight: // EXIF = 8 172 | case UIImageOrientationRightMirrored: // EXIF = 7 173 | transform = CGAffineTransformTranslate(transform, 0, newSize.height); 174 | transform = CGAffineTransformRotate(transform, -M_PI_2); 175 | break; 176 | } 177 | 178 | switch (self.imageOrientation) { 179 | case UIImageOrientationUpMirrored: // EXIF = 2 180 | case UIImageOrientationDownMirrored: // EXIF = 4 181 | transform = CGAffineTransformTranslate(transform, newSize.width, 0); 182 | transform = CGAffineTransformScale(transform, -1, 1); 183 | break; 184 | 185 | case UIImageOrientationLeftMirrored: // EXIF = 5 186 | case UIImageOrientationRightMirrored: // EXIF = 7 187 | transform = CGAffineTransformTranslate(transform, newSize.height, 0); 188 | transform = CGAffineTransformScale(transform, -1, 1); 189 | break; 190 | } 191 | 192 | return transform; 193 | } 194 | 195 | @end 196 | -------------------------------------------------------------------------------- /Classes/UIKit/UIImage+RoundedCorner.h: -------------------------------------------------------------------------------- 1 | // UIImage+RoundedCorner.h 2 | // Created by Trevor Harmon on 9/20/09. 3 | // Free for personal or commercial use, with or without modification. 4 | // No warranty is expressed or implied. 5 | 6 | #import 7 | 8 | // Extends the UIImage class to support making rounded corners 9 | @interface UIImage (RoundedCorner) 10 | - (UIImage *)roundedCornerImage:(NSInteger)cornerSize borderSize:(NSInteger)borderSize; 11 | @end 12 | -------------------------------------------------------------------------------- /Classes/UIKit/UIImage+RoundedCorner.m: -------------------------------------------------------------------------------- 1 | // UIImage+RoundedCorner.m 2 | // Created by Trevor Harmon on 9/20/09. 3 | // Free for personal or commercial use, with or without modification. 4 | // No warranty is expressed or implied. 5 | 6 | #import "UIImage+RoundedCorner.h" 7 | #import "UIImage+Alpha.h" 8 | 9 | // Private helper methods 10 | @interface UIImage () 11 | - (void)addRoundedRectToPath:(CGRect)rect context:(CGContextRef)context ovalWidth:(CGFloat)ovalWidth ovalHeight:(CGFloat)ovalHeight; 12 | @end 13 | 14 | @implementation UIImage (RoundedCorner) 15 | 16 | // Creates a copy of this image with rounded corners 17 | // If borderSize is non-zero, a transparent border of the given size will also be added 18 | // Original author: Björn Sållarp. Used with permission. See: http://blog.sallarp.com/iphone-uiimage-round-corners/ 19 | - (UIImage *)roundedCornerImage:(NSInteger)cornerSize borderSize:(NSInteger)borderSize { 20 | // If the image does not have an alpha layer, add one 21 | UIImage *image = [self imageWithAlpha]; 22 | 23 | // Build a context that's the same dimensions as the new size 24 | CGContextRef context = CGBitmapContextCreate(NULL, 25 | image.size.width, 26 | image.size.height, 27 | CGImageGetBitsPerComponent(image.CGImage), 28 | 0, 29 | CGImageGetColorSpace(image.CGImage), 30 | CGImageGetBitmapInfo(image.CGImage)); 31 | 32 | // Create a clipping path with rounded corners 33 | CGContextBeginPath(context); 34 | [self addRoundedRectToPath:CGRectMake(borderSize, borderSize, image.size.width - borderSize * 2, image.size.height - borderSize * 2) 35 | context:context 36 | ovalWidth:cornerSize 37 | ovalHeight:cornerSize]; 38 | CGContextClosePath(context); 39 | CGContextClip(context); 40 | 41 | // Draw the image to the context; the clipping path will make anything outside the rounded rect transparent 42 | CGContextDrawImage(context, CGRectMake(0, 0, image.size.width, image.size.height), image.CGImage); 43 | 44 | // Create a CGImage from the context 45 | CGImageRef clippedImage = CGBitmapContextCreateImage(context); 46 | CGContextRelease(context); 47 | 48 | // Create a UIImage from the CGImage 49 | UIImage *roundedImage = [UIImage imageWithCGImage:clippedImage]; 50 | CGImageRelease(clippedImage); 51 | 52 | return roundedImage; 53 | } 54 | 55 | #pragma mark - 56 | #pragma mark Private helper methods 57 | 58 | // Adds a rectangular path to the given context and rounds its corners by the given extents 59 | // Original author: Björn Sållarp. Used with permission. See: http://blog.sallarp.com/iphone-uiimage-round-corners/ 60 | - (void)addRoundedRectToPath:(CGRect)rect context:(CGContextRef)context ovalWidth:(CGFloat)ovalWidth ovalHeight:(CGFloat)ovalHeight { 61 | if (ovalWidth == 0 || ovalHeight == 0) { 62 | CGContextAddRect(context, rect); 63 | return; 64 | } 65 | CGContextSaveGState(context); 66 | CGContextTranslateCTM(context, CGRectGetMinX(rect), CGRectGetMinY(rect)); 67 | CGContextScaleCTM(context, ovalWidth, ovalHeight); 68 | CGFloat fw = CGRectGetWidth(rect) / ovalWidth; 69 | CGFloat fh = CGRectGetHeight(rect) / ovalHeight; 70 | CGContextMoveToPoint(context, fw, fh/2); 71 | CGContextAddArcToPoint(context, fw, fh, fw/2, fh, 1); 72 | CGContextAddArcToPoint(context, 0, fh, 0, fh/2, 1); 73 | CGContextAddArcToPoint(context, 0, 0, fw/2, 0, 1); 74 | CGContextAddArcToPoint(context, fw, 0, fw, fh/2, 1); 75 | CGContextClosePath(context); 76 | CGContextRestoreGState(context); 77 | } 78 | 79 | @end 80 | -------------------------------------------------------------------------------- /Classes/UIKit/UIImageView+LRAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImageView+ImageLoading.h 3 | // LRToolkig 4 | // 5 | // Created by Luke Redpath on 18/05/2010. 6 | // Copyright 2010 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface UIImageView (LRAdditions) 13 | 14 | + (id)imageViewWithImageNamed:(NSString *)imageName; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Classes/UIKit/UIImageView+LRAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIImageView+ImageLoading.m 3 | // LRToolkig 4 | // 5 | // Created by Luke Redpath on 18/05/2010. 6 | // Copyright 2010 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import "UIImageView+LRAdditions.h" 10 | 11 | 12 | @implementation UIImageView (LRAdditions) 13 | 14 | + (id)imageViewWithImageNamed:(NSString *)imageName; 15 | { 16 | UIImage *image = [UIImage imageNamed:imageName]; 17 | UIImageView *imageView = [[self alloc] initWithImage:image]; 18 | return [imageView autorelease]; 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Classes/UIKit/UIToolbar+LRAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIToolbar+SwapItem.h 3 | // Flare 4 | // 5 | // Created by Luke Redpath on 17/06/2010. 6 | // Copyright 2010 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface UIToolbar (LRAdditions) 13 | 14 | - (void)swapBarItem:(UIBarItem *)oldItem withItem:(UIBarItem *)newItem; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Classes/UIKit/UIToolbar+LRAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIToolbar+SwapItem.m 3 | // Flare 4 | // 5 | // Created by Luke Redpath on 17/06/2010. 6 | // Copyright 2010 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import "UIToolbar+LRAdditions.h" 10 | 11 | 12 | @implementation UIToolbar (LRAdditions) 13 | 14 | - (void)swapBarItem:(UIBarItem *)oldItem withItem:(UIBarItem *)newItem; 15 | { 16 | NSMutableArray *currentItems = [self.items mutableCopy]; 17 | if (![currentItems containsObject:oldItem]) { 18 | NSLog(@"Warning: tried to swap out %@ from toolbar %@ items when it doesn't exist", oldItem, self); 19 | return; 20 | } 21 | NSInteger indexOfOldItem = [currentItems indexOfObject:oldItem]; 22 | [currentItems replaceObjectAtIndex:indexOfOldItem withObject:newItem]; 23 | [self setItems:currentItems]; 24 | } 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Classes/UIKit/UIView+Position.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+Position.h 3 | // LRToolkit 4 | // 5 | // Created by Tyler Neylon on 3/19/10. 6 | // Copyleft 2010 Bynomial. 7 | // http://bynomial.com/blog/?p=24 8 | // 9 | 10 | #import 11 | 12 | 13 | @interface UIView (Position) 14 | 15 | @property (nonatomic) CGPoint frameOrigin; 16 | @property (nonatomic) CGSize frameSize; 17 | 18 | @property (nonatomic) CGFloat frameX; 19 | @property (nonatomic) CGFloat frameY; 20 | 21 | // Setting these modifies the origin but not the size. 22 | @property (nonatomic) CGFloat frameRight; 23 | @property (nonatomic) CGFloat frameBottom; 24 | 25 | @property (nonatomic) CGFloat frameWidth; 26 | @property (nonatomic) CGFloat frameHeight; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /Classes/UIKit/UIView+Position.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+Position.m 3 | // LRToolkit 4 | // 5 | // Created by Tyler Neylon on 3/19/10. 6 | // Copyleft 2010 Bynomial. 7 | // http://bynomial.com/blog/?p=24 8 | // 9 | 10 | #import "UIView+Position.h" 11 | 12 | 13 | @implementation UIView (Position) 14 | 15 | - (CGPoint)frameOrigin { 16 | return self.frame.origin; 17 | } 18 | 19 | - (void)setFrameOrigin:(CGPoint)newOrigin { 20 | self.frame = CGRectMake(newOrigin.x, newOrigin.y, self.frame.size.width, self.frame.size.height); 21 | } 22 | 23 | - (CGSize)frameSize { 24 | return self.frame.size; 25 | } 26 | 27 | - (void)setFrameSize:(CGSize)newSize { 28 | self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, 29 | newSize.width, newSize.height); 30 | } 31 | 32 | - (CGFloat)frameX { 33 | return self.frame.origin.x; 34 | } 35 | 36 | - (void)setFrameX:(CGFloat)newX { 37 | self.frame = CGRectMake(newX, self.frame.origin.y, 38 | self.frame.size.width, self.frame.size.height); 39 | } 40 | 41 | - (CGFloat)frameY { 42 | return self.frame.origin.y; 43 | } 44 | 45 | - (void)setFrameY:(CGFloat)newY { 46 | self.frame = CGRectMake(self.frame.origin.x, newY, 47 | self.frame.size.width, self.frame.size.height); 48 | } 49 | 50 | - (CGFloat)frameRight { 51 | return self.frame.origin.x + self.frame.size.width; 52 | } 53 | 54 | - (void)setFrameRight:(CGFloat)newRight { 55 | self.frame = CGRectMake(newRight - self.frame.size.width, self.frame.origin.y, 56 | self.frame.size.width, self.frame.size.height); 57 | } 58 | 59 | - (CGFloat)frameBottom { 60 | return self.frame.origin.y + self.frame.size.height; 61 | } 62 | 63 | - (void)setFrameBottom:(CGFloat)newBottom { 64 | self.frame = CGRectMake(self.frame.origin.x, newBottom - self.frame.size.height, 65 | self.frame.size.width, self.frame.size.height); 66 | } 67 | 68 | - (CGFloat)frameWidth { 69 | return self.frame.size.width; 70 | } 71 | 72 | - (void)setFrameWidth:(CGFloat)newWidth { 73 | self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, 74 | newWidth, self.frame.size.height); 75 | } 76 | 77 | - (CGFloat)frameHeight { 78 | return self.frame.size.height; 79 | } 80 | 81 | - (void)setFrameHeight:(CGFloat)newHeight { 82 | self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, 83 | self.frame.size.width, newHeight); 84 | } 85 | 86 | @end 87 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010 Luke Redpath 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /LRToolkit.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 45; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | A387AD1F11CE9215000865EE /* UIImage+Alpha.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD1911CE9215000865EE /* UIImage+Alpha.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11 | A387AD2011CE9215000865EE /* UIImage+Alpha.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD1A11CE9215000865EE /* UIImage+Alpha.m */; }; 12 | A387AD2111CE9215000865EE /* UIImage+RoundedCorner.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD1B11CE9215000865EE /* UIImage+RoundedCorner.h */; settings = {ATTRIBUTES = (Public, ); }; }; 13 | A387AD2211CE9215000865EE /* UIImage+RoundedCorner.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD1C11CE9215000865EE /* UIImage+RoundedCorner.m */; }; 14 | A387AD2311CE9215000865EE /* UIImage+Resize.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD1D11CE9215000865EE /* UIImage+Resize.h */; settings = {ATTRIBUTES = (Public, ); }; }; 15 | A387AD2411CE9215000865EE /* UIImage+Resize.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD1E11CE9215000865EE /* UIImage+Resize.m */; }; 16 | A387AD2711CE9244000865EE /* UIColor+Hex.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD2511CE9244000865EE /* UIColor+Hex.h */; settings = {ATTRIBUTES = (Public, ); }; }; 17 | A387AD2811CE9244000865EE /* UIColor+Hex.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD2611CE9244000865EE /* UIColor+Hex.m */; }; 18 | A387AD2F11CE9253000865EE /* UIImageView+LRAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD2911CE9253000865EE /* UIImageView+LRAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; 19 | A387AD3011CE9253000865EE /* UIImageView+LRAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD2A11CE9253000865EE /* UIImageView+LRAdditions.m */; }; 20 | A387AD3111CE9253000865EE /* UIView+Position.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD2B11CE9253000865EE /* UIView+Position.h */; settings = {ATTRIBUTES = (Public, ); }; }; 21 | A387AD3211CE9253000865EE /* UIView+Position.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD2C11CE9253000865EE /* UIView+Position.m */; }; 22 | A387AD3311CE9253000865EE /* UIToolbar+LRAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD2D11CE9253000865EE /* UIToolbar+LRAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; 23 | A387AD3411CE9253000865EE /* UIToolbar+LRAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD2E11CE9253000865EE /* UIToolbar+LRAdditions.m */; }; 24 | A387AD4211CE927B000865EE /* NSData+Base64.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD3611CE927B000865EE /* NSData+Base64.h */; settings = {ATTRIBUTES = (Public, ); }; }; 25 | A387AD4311CE927B000865EE /* NSData+Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD3711CE927B000865EE /* NSData+Base64.m */; }; 26 | A387AD4411CE927B000865EE /* NSString+Hashing.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD3811CE927B000865EE /* NSString+Hashing.h */; settings = {ATTRIBUTES = (Public, ); }; }; 27 | A387AD4511CE927B000865EE /* NSString+Hashing.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD3911CE927B000865EE /* NSString+Hashing.m */; }; 28 | A387AD4611CE927B000865EE /* NSArray+Indexing.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD3A11CE927B000865EE /* NSArray+Indexing.h */; settings = {ATTRIBUTES = (Public, ); }; }; 29 | A387AD4711CE927B000865EE /* NSArray+Indexing.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD3B11CE927B000865EE /* NSArray+Indexing.m */; }; 30 | A387AD4811CE927B000865EE /* NSURL+StringFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD3C11CE927B000865EE /* NSURL+StringFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; 31 | A387AD4911CE927B000865EE /* NSURL+StringFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD3D11CE927B000865EE /* NSURL+StringFormat.m */; }; 32 | A387AD4A11CE927B000865EE /* NSString+GHTimeInterval.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD3E11CE927B000865EE /* NSString+GHTimeInterval.h */; settings = {ATTRIBUTES = (Public, ); }; }; 33 | A387AD4B11CE927B000865EE /* NSString+GHTimeInterval.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD3F11CE927B000865EE /* NSString+GHTimeInterval.m */; }; 34 | A387AD4C11CE927B000865EE /* NSString+FileSize.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD4011CE927B000865EE /* NSString+FileSize.h */; settings = {ATTRIBUTES = (Public, ); }; }; 35 | A387AD4D11CE927B000865EE /* NSString+FileSize.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD4111CE927B000865EE /* NSString+FileSize.m */; }; 36 | A387AD5011CE9613000865EE /* LRUIColorPallette.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD4E11CE9613000865EE /* LRUIColorPallette.h */; settings = {ATTRIBUTES = (Public, ); }; }; 37 | A387AD5111CE9613000865EE /* LRUIColorPallette.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD4F11CE9613000865EE /* LRUIColorPallette.m */; }; 38 | A387AD6611CE9704000865EE /* UIColor+SharedPallette.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD6411CE9704000865EE /* UIColor+SharedPallette.h */; settings = {ATTRIBUTES = (Public, ); }; }; 39 | A387AD6711CE9704000865EE /* UIColor+SharedPallette.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD6511CE9704000865EE /* UIColor+SharedPallette.m */; }; 40 | A387AD7911CE991E000865EE /* LRFoundationMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD7811CE991E000865EE /* LRFoundationMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; 41 | A387ADB711CE9A99000865EE /* LRTableViewCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = A387ADB511CE9A99000865EE /* LRTableViewCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; 42 | A387ADB811CE9A99000865EE /* LRTableViewCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = A387ADB611CE9A99000865EE /* LRTableViewCollection.m */; }; 43 | A387ADC411CE9AE0000865EE /* LRPopoverManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A387ADC211CE9AE0000865EE /* LRPopoverManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; 44 | A387ADC511CE9AE0000865EE /* LRPopoverManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A387ADC311CE9AE0000865EE /* LRPopoverManager.m */; }; 45 | A387B69111D11054000865EE /* LRToolkit_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = AA747D9E0F9514B9006C5449 /* LRToolkit_Prefix.pch */; settings = {ATTRIBUTES = (); }; }; 46 | A387B69211D11054000865EE /* UIImage+Alpha.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD1911CE9215000865EE /* UIImage+Alpha.h */; settings = {ATTRIBUTES = (Public, ); }; }; 47 | A387B69311D11054000865EE /* UIImage+RoundedCorner.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD1B11CE9215000865EE /* UIImage+RoundedCorner.h */; settings = {ATTRIBUTES = (Public, ); }; }; 48 | A387B69411D11054000865EE /* UIImage+Resize.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD1D11CE9215000865EE /* UIImage+Resize.h */; settings = {ATTRIBUTES = (Public, ); }; }; 49 | A387B69511D11054000865EE /* UIColor+Hex.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD2511CE9244000865EE /* UIColor+Hex.h */; settings = {ATTRIBUTES = (Public, ); }; }; 50 | A387B69611D11054000865EE /* UIImageView+LRAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD2911CE9253000865EE /* UIImageView+LRAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; 51 | A387B69711D11054000865EE /* UIView+Position.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD2B11CE9253000865EE /* UIView+Position.h */; settings = {ATTRIBUTES = (Public, ); }; }; 52 | A387B69811D11054000865EE /* UIToolbar+LRAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD2D11CE9253000865EE /* UIToolbar+LRAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53 | A387B69911D11054000865EE /* NSData+Base64.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD3611CE927B000865EE /* NSData+Base64.h */; settings = {ATTRIBUTES = (Public, ); }; }; 54 | A387B69A11D11054000865EE /* NSString+Hashing.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD3811CE927B000865EE /* NSString+Hashing.h */; settings = {ATTRIBUTES = (Public, ); }; }; 55 | A387B69B11D11054000865EE /* NSArray+Indexing.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD3A11CE927B000865EE /* NSArray+Indexing.h */; settings = {ATTRIBUTES = (Public, ); }; }; 56 | A387B69C11D11054000865EE /* NSURL+StringFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD3C11CE927B000865EE /* NSURL+StringFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57 | A387B69D11D11054000865EE /* NSString+GHTimeInterval.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD3E11CE927B000865EE /* NSString+GHTimeInterval.h */; settings = {ATTRIBUTES = (Public, ); }; }; 58 | A387B69E11D11054000865EE /* NSString+FileSize.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD4011CE927B000865EE /* NSString+FileSize.h */; settings = {ATTRIBUTES = (Public, ); }; }; 59 | A387B69F11D11054000865EE /* LRUIColorPallette.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD4E11CE9613000865EE /* LRUIColorPallette.h */; settings = {ATTRIBUTES = (Public, ); }; }; 60 | A387B6A011D11054000865EE /* UIColor+SharedPallette.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD6411CE9704000865EE /* UIColor+SharedPallette.h */; settings = {ATTRIBUTES = (Public, ); }; }; 61 | A387B6A111D11054000865EE /* LRFoundationMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = A387AD7811CE991E000865EE /* LRFoundationMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; 62 | A387B6A211D11054000865EE /* LRTableViewCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = A387ADB511CE9A99000865EE /* LRTableViewCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; 63 | A387B6A511D11054000865EE /* UIImage+Alpha.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD1A11CE9215000865EE /* UIImage+Alpha.m */; }; 64 | A387B6A611D11054000865EE /* UIImage+RoundedCorner.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD1C11CE9215000865EE /* UIImage+RoundedCorner.m */; }; 65 | A387B6A711D11054000865EE /* UIImage+Resize.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD1E11CE9215000865EE /* UIImage+Resize.m */; }; 66 | A387B6A811D11054000865EE /* UIColor+Hex.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD2611CE9244000865EE /* UIColor+Hex.m */; }; 67 | A387B6A911D11054000865EE /* UIImageView+LRAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD2A11CE9253000865EE /* UIImageView+LRAdditions.m */; }; 68 | A387B6AA11D11054000865EE /* UIView+Position.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD2C11CE9253000865EE /* UIView+Position.m */; }; 69 | A387B6AB11D11054000865EE /* UIToolbar+LRAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD2E11CE9253000865EE /* UIToolbar+LRAdditions.m */; }; 70 | A387B6AC11D11054000865EE /* NSData+Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD3711CE927B000865EE /* NSData+Base64.m */; }; 71 | A387B6AD11D11054000865EE /* NSString+Hashing.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD3911CE927B000865EE /* NSString+Hashing.m */; }; 72 | A387B6AE11D11054000865EE /* NSArray+Indexing.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD3B11CE927B000865EE /* NSArray+Indexing.m */; }; 73 | A387B6AF11D11054000865EE /* NSURL+StringFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD3D11CE927B000865EE /* NSURL+StringFormat.m */; }; 74 | A387B6B011D11054000865EE /* NSString+GHTimeInterval.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD3F11CE927B000865EE /* NSString+GHTimeInterval.m */; }; 75 | A387B6B111D11054000865EE /* NSString+FileSize.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD4111CE927B000865EE /* NSString+FileSize.m */; }; 76 | A387B6B211D11054000865EE /* LRUIColorPallette.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD4F11CE9613000865EE /* LRUIColorPallette.m */; }; 77 | A387B6B311D11054000865EE /* UIColor+SharedPallette.m in Sources */ = {isa = PBXBuildFile; fileRef = A387AD6511CE9704000865EE /* UIColor+SharedPallette.m */; }; 78 | A387B6B411D11054000865EE /* LRTableViewCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = A387ADB611CE9A99000865EE /* LRTableViewCollection.m */; }; 79 | A387B6B711D11054000865EE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AACBBE490F95108600F1A2B1 /* Foundation.framework */; }; 80 | AA747D9F0F9514B9006C5449 /* LRToolkit_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = AA747D9E0F9514B9006C5449 /* LRToolkit_Prefix.pch */; settings = {ATTRIBUTES = (Public, ); }; }; 81 | AACBBE4A0F95108600F1A2B1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AACBBE490F95108600F1A2B1 /* Foundation.framework */; }; 82 | /* End PBXBuildFile section */ 83 | 84 | /* Begin PBXFileReference section */ 85 | A387AD1911CE9215000865EE /* UIImage+Alpha.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+Alpha.h"; sourceTree = ""; }; 86 | A387AD1A11CE9215000865EE /* UIImage+Alpha.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Alpha.m"; sourceTree = ""; }; 87 | A387AD1B11CE9215000865EE /* UIImage+RoundedCorner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+RoundedCorner.h"; sourceTree = ""; }; 88 | A387AD1C11CE9215000865EE /* UIImage+RoundedCorner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+RoundedCorner.m"; sourceTree = ""; }; 89 | A387AD1D11CE9215000865EE /* UIImage+Resize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+Resize.h"; sourceTree = ""; }; 90 | A387AD1E11CE9215000865EE /* UIImage+Resize.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Resize.m"; sourceTree = ""; }; 91 | A387AD2511CE9244000865EE /* UIColor+Hex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIColor+Hex.h"; sourceTree = ""; }; 92 | A387AD2611CE9244000865EE /* UIColor+Hex.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+Hex.m"; sourceTree = ""; }; 93 | A387AD2911CE9253000865EE /* UIImageView+LRAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+LRAdditions.h"; sourceTree = ""; }; 94 | A387AD2A11CE9253000865EE /* UIImageView+LRAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+LRAdditions.m"; sourceTree = ""; }; 95 | A387AD2B11CE9253000865EE /* UIView+Position.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+Position.h"; sourceTree = ""; }; 96 | A387AD2C11CE9253000865EE /* UIView+Position.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+Position.m"; sourceTree = ""; }; 97 | A387AD2D11CE9253000865EE /* UIToolbar+LRAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIToolbar+LRAdditions.h"; sourceTree = ""; }; 98 | A387AD2E11CE9253000865EE /* UIToolbar+LRAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIToolbar+LRAdditions.m"; sourceTree = ""; }; 99 | A387AD3611CE927B000865EE /* NSData+Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+Base64.h"; sourceTree = ""; }; 100 | A387AD3711CE927B000865EE /* NSData+Base64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+Base64.m"; sourceTree = ""; }; 101 | A387AD3811CE927B000865EE /* NSString+Hashing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Hashing.h"; sourceTree = ""; }; 102 | A387AD3911CE927B000865EE /* NSString+Hashing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Hashing.m"; sourceTree = ""; }; 103 | A387AD3A11CE927B000865EE /* NSArray+Indexing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+Indexing.h"; sourceTree = ""; }; 104 | A387AD3B11CE927B000865EE /* NSArray+Indexing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+Indexing.m"; sourceTree = ""; }; 105 | A387AD3C11CE927B000865EE /* NSURL+StringFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSURL+StringFormat.h"; sourceTree = ""; }; 106 | A387AD3D11CE927B000865EE /* NSURL+StringFormat.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSURL+StringFormat.m"; sourceTree = ""; }; 107 | A387AD3E11CE927B000865EE /* NSString+GHTimeInterval.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+GHTimeInterval.h"; sourceTree = ""; }; 108 | A387AD3F11CE927B000865EE /* NSString+GHTimeInterval.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+GHTimeInterval.m"; sourceTree = ""; }; 109 | A387AD4011CE927B000865EE /* NSString+FileSize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+FileSize.h"; sourceTree = ""; }; 110 | A387AD4111CE927B000865EE /* NSString+FileSize.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+FileSize.m"; sourceTree = ""; }; 111 | A387AD4E11CE9613000865EE /* LRUIColorPallette.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LRUIColorPallette.h; sourceTree = ""; }; 112 | A387AD4F11CE9613000865EE /* LRUIColorPallette.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LRUIColorPallette.m; sourceTree = ""; }; 113 | A387AD6411CE9704000865EE /* UIColor+SharedPallette.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIColor+SharedPallette.h"; sourceTree = ""; }; 114 | A387AD6511CE9704000865EE /* UIColor+SharedPallette.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+SharedPallette.m"; sourceTree = ""; }; 115 | A387AD7811CE991E000865EE /* LRFoundationMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LRFoundationMacros.h; sourceTree = ""; }; 116 | A387ADB511CE9A99000865EE /* LRTableViewCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LRTableViewCollection.h; sourceTree = ""; }; 117 | A387ADB611CE9A99000865EE /* LRTableViewCollection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LRTableViewCollection.m; sourceTree = ""; }; 118 | A387ADC211CE9AE0000865EE /* LRPopoverManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LRPopoverManager.h; sourceTree = ""; }; 119 | A387ADC311CE9AE0000865EE /* LRPopoverManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LRPopoverManager.m; sourceTree = ""; }; 120 | A387B6BB11D11054000865EE /* libLRToolkit-iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libLRToolkit-iOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 121 | AA747D9E0F9514B9006C5449 /* LRToolkit_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LRToolkit_Prefix.pch; sourceTree = SOURCE_ROOT; }; 122 | AACBBE490F95108600F1A2B1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 123 | D2AAC07E0554694100DB518D /* libLRToolkit-iPad.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libLRToolkit-iPad.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 124 | /* End PBXFileReference section */ 125 | 126 | /* Begin PBXFrameworksBuildPhase section */ 127 | A387B6B611D11054000865EE /* Frameworks */ = { 128 | isa = PBXFrameworksBuildPhase; 129 | buildActionMask = 2147483647; 130 | files = ( 131 | A387B6B711D11054000865EE /* Foundation.framework in Frameworks */, 132 | ); 133 | runOnlyForDeploymentPostprocessing = 0; 134 | }; 135 | D2AAC07C0554694100DB518D /* Frameworks */ = { 136 | isa = PBXFrameworksBuildPhase; 137 | buildActionMask = 2147483647; 138 | files = ( 139 | AACBBE4A0F95108600F1A2B1 /* Foundation.framework in Frameworks */, 140 | ); 141 | runOnlyForDeploymentPostprocessing = 0; 142 | }; 143 | /* End PBXFrameworksBuildPhase section */ 144 | 145 | /* Begin PBXGroup section */ 146 | 034768DFFF38A50411DB9C8B /* Products */ = { 147 | isa = PBXGroup; 148 | children = ( 149 | D2AAC07E0554694100DB518D /* libLRToolkit-iPad.a */, 150 | A387B6BB11D11054000865EE /* libLRToolkit-iOS.a */, 151 | ); 152 | name = Products; 153 | sourceTree = ""; 154 | }; 155 | 0867D691FE84028FC02AAC07 /* LRToolkit */ = { 156 | isa = PBXGroup; 157 | children = ( 158 | A35ED82D11CE802D00055268 /* Specs */, 159 | A35ED82911CE802300055268 /* Classes */, 160 | 32C88DFF0371C24200C91783 /* Other Sources */, 161 | 0867D69AFE84028FC02AAC07 /* Frameworks */, 162 | 034768DFFF38A50411DB9C8B /* Products */, 163 | ); 164 | name = LRToolkit; 165 | sourceTree = ""; 166 | }; 167 | 0867D69AFE84028FC02AAC07 /* Frameworks */ = { 168 | isa = PBXGroup; 169 | children = ( 170 | AACBBE490F95108600F1A2B1 /* Foundation.framework */, 171 | ); 172 | name = Frameworks; 173 | sourceTree = ""; 174 | }; 175 | 32C88DFF0371C24200C91783 /* Other Sources */ = { 176 | isa = PBXGroup; 177 | children = ( 178 | AA747D9E0F9514B9006C5449 /* LRToolkit_Prefix.pch */, 179 | ); 180 | name = "Other Sources"; 181 | sourceTree = ""; 182 | }; 183 | A35ED82911CE802300055268 /* Classes */ = { 184 | isa = PBXGroup; 185 | children = ( 186 | A35ED82A11CE802300055268 /* Foundation */, 187 | A35ED82B11CE802300055268 /* UIKit */, 188 | ); 189 | path = Classes; 190 | sourceTree = ""; 191 | }; 192 | A35ED82A11CE802300055268 /* Foundation */ = { 193 | isa = PBXGroup; 194 | children = ( 195 | A387AD3511CE925E000865EE /* Categories */, 196 | A387AD7811CE991E000865EE /* LRFoundationMacros.h */, 197 | ); 198 | path = Foundation; 199 | sourceTree = ""; 200 | }; 201 | A35ED82B11CE802300055268 /* UIKit */ = { 202 | isa = PBXGroup; 203 | children = ( 204 | A387ADC011CE9AC6000865EE /* iPad Only */, 205 | A387ADB511CE9A99000865EE /* LRTableViewCollection.h */, 206 | A387ADB611CE9A99000865EE /* LRTableViewCollection.m */, 207 | A387AD1411CE91FD000865EE /* Categories */, 208 | A387AD4E11CE9613000865EE /* LRUIColorPallette.h */, 209 | A387AD4F11CE9613000865EE /* LRUIColorPallette.m */, 210 | ); 211 | path = UIKit; 212 | sourceTree = ""; 213 | }; 214 | A35ED82D11CE802D00055268 /* Specs */ = { 215 | isa = PBXGroup; 216 | children = ( 217 | ); 218 | name = Specs; 219 | sourceTree = ""; 220 | }; 221 | A387AD1411CE91FD000865EE /* Categories */ = { 222 | isa = PBXGroup; 223 | children = ( 224 | A387AD2911CE9253000865EE /* UIImageView+LRAdditions.h */, 225 | A387AD2A11CE9253000865EE /* UIImageView+LRAdditions.m */, 226 | A387AD2B11CE9253000865EE /* UIView+Position.h */, 227 | A387AD2C11CE9253000865EE /* UIView+Position.m */, 228 | A387AD2D11CE9253000865EE /* UIToolbar+LRAdditions.h */, 229 | A387AD2E11CE9253000865EE /* UIToolbar+LRAdditions.m */, 230 | A387AD2511CE9244000865EE /* UIColor+Hex.h */, 231 | A387AD2611CE9244000865EE /* UIColor+Hex.m */, 232 | A387AD1911CE9215000865EE /* UIImage+Alpha.h */, 233 | A387AD1A11CE9215000865EE /* UIImage+Alpha.m */, 234 | A387AD1B11CE9215000865EE /* UIImage+RoundedCorner.h */, 235 | A387AD1C11CE9215000865EE /* UIImage+RoundedCorner.m */, 236 | A387AD1D11CE9215000865EE /* UIImage+Resize.h */, 237 | A387AD1E11CE9215000865EE /* UIImage+Resize.m */, 238 | A387AD6411CE9704000865EE /* UIColor+SharedPallette.h */, 239 | A387AD6511CE9704000865EE /* UIColor+SharedPallette.m */, 240 | ); 241 | name = Categories; 242 | sourceTree = ""; 243 | }; 244 | A387AD3511CE925E000865EE /* Categories */ = { 245 | isa = PBXGroup; 246 | children = ( 247 | A387AD3611CE927B000865EE /* NSData+Base64.h */, 248 | A387AD3711CE927B000865EE /* NSData+Base64.m */, 249 | A387AD3811CE927B000865EE /* NSString+Hashing.h */, 250 | A387AD3911CE927B000865EE /* NSString+Hashing.m */, 251 | A387AD3A11CE927B000865EE /* NSArray+Indexing.h */, 252 | A387AD3B11CE927B000865EE /* NSArray+Indexing.m */, 253 | A387AD3C11CE927B000865EE /* NSURL+StringFormat.h */, 254 | A387AD3D11CE927B000865EE /* NSURL+StringFormat.m */, 255 | A387AD3E11CE927B000865EE /* NSString+GHTimeInterval.h */, 256 | A387AD3F11CE927B000865EE /* NSString+GHTimeInterval.m */, 257 | A387AD4011CE927B000865EE /* NSString+FileSize.h */, 258 | A387AD4111CE927B000865EE /* NSString+FileSize.m */, 259 | ); 260 | name = Categories; 261 | sourceTree = ""; 262 | }; 263 | A387ADC011CE9AC6000865EE /* iPad Only */ = { 264 | isa = PBXGroup; 265 | children = ( 266 | A387ADC211CE9AE0000865EE /* LRPopoverManager.h */, 267 | A387ADC311CE9AE0000865EE /* LRPopoverManager.m */, 268 | ); 269 | name = "iPad Only"; 270 | sourceTree = ""; 271 | }; 272 | /* End PBXGroup section */ 273 | 274 | /* Begin PBXHeadersBuildPhase section */ 275 | A387B69011D11054000865EE /* Headers */ = { 276 | isa = PBXHeadersBuildPhase; 277 | buildActionMask = 2147483647; 278 | files = ( 279 | A387B69111D11054000865EE /* LRToolkit_Prefix.pch in Headers */, 280 | A387B69211D11054000865EE /* UIImage+Alpha.h in Headers */, 281 | A387B69311D11054000865EE /* UIImage+RoundedCorner.h in Headers */, 282 | A387B69411D11054000865EE /* UIImage+Resize.h in Headers */, 283 | A387B69511D11054000865EE /* UIColor+Hex.h in Headers */, 284 | A387B69611D11054000865EE /* UIImageView+LRAdditions.h in Headers */, 285 | A387B69711D11054000865EE /* UIView+Position.h in Headers */, 286 | A387B69811D11054000865EE /* UIToolbar+LRAdditions.h in Headers */, 287 | A387B69911D11054000865EE /* NSData+Base64.h in Headers */, 288 | A387B69A11D11054000865EE /* NSString+Hashing.h in Headers */, 289 | A387B69B11D11054000865EE /* NSArray+Indexing.h in Headers */, 290 | A387B69C11D11054000865EE /* NSURL+StringFormat.h in Headers */, 291 | A387B69D11D11054000865EE /* NSString+GHTimeInterval.h in Headers */, 292 | A387B69E11D11054000865EE /* NSString+FileSize.h in Headers */, 293 | A387B69F11D11054000865EE /* LRUIColorPallette.h in Headers */, 294 | A387B6A011D11054000865EE /* UIColor+SharedPallette.h in Headers */, 295 | A387B6A111D11054000865EE /* LRFoundationMacros.h in Headers */, 296 | A387B6A211D11054000865EE /* LRTableViewCollection.h in Headers */, 297 | ); 298 | runOnlyForDeploymentPostprocessing = 0; 299 | }; 300 | D2AAC07A0554694100DB518D /* Headers */ = { 301 | isa = PBXHeadersBuildPhase; 302 | buildActionMask = 2147483647; 303 | files = ( 304 | AA747D9F0F9514B9006C5449 /* LRToolkit_Prefix.pch in Headers */, 305 | A387AD1F11CE9215000865EE /* UIImage+Alpha.h in Headers */, 306 | A387AD2111CE9215000865EE /* UIImage+RoundedCorner.h in Headers */, 307 | A387AD2311CE9215000865EE /* UIImage+Resize.h in Headers */, 308 | A387AD2711CE9244000865EE /* UIColor+Hex.h in Headers */, 309 | A387AD2F11CE9253000865EE /* UIImageView+LRAdditions.h in Headers */, 310 | A387AD3111CE9253000865EE /* UIView+Position.h in Headers */, 311 | A387AD3311CE9253000865EE /* UIToolbar+LRAdditions.h in Headers */, 312 | A387AD4211CE927B000865EE /* NSData+Base64.h in Headers */, 313 | A387AD4411CE927B000865EE /* NSString+Hashing.h in Headers */, 314 | A387AD4611CE927B000865EE /* NSArray+Indexing.h in Headers */, 315 | A387AD4811CE927B000865EE /* NSURL+StringFormat.h in Headers */, 316 | A387AD4A11CE927B000865EE /* NSString+GHTimeInterval.h in Headers */, 317 | A387AD4C11CE927B000865EE /* NSString+FileSize.h in Headers */, 318 | A387AD5011CE9613000865EE /* LRUIColorPallette.h in Headers */, 319 | A387AD6611CE9704000865EE /* UIColor+SharedPallette.h in Headers */, 320 | A387AD7911CE991E000865EE /* LRFoundationMacros.h in Headers */, 321 | A387ADB711CE9A99000865EE /* LRTableViewCollection.h in Headers */, 322 | A387ADC411CE9AE0000865EE /* LRPopoverManager.h in Headers */, 323 | ); 324 | runOnlyForDeploymentPostprocessing = 0; 325 | }; 326 | /* End PBXHeadersBuildPhase section */ 327 | 328 | /* Begin PBXNativeTarget section */ 329 | A387B68F11D11054000865EE /* LRToolkit-iOS */ = { 330 | isa = PBXNativeTarget; 331 | buildConfigurationList = A387B6B811D11054000865EE /* Build configuration list for PBXNativeTarget "LRToolkit-iOS" */; 332 | buildPhases = ( 333 | A387B69011D11054000865EE /* Headers */, 334 | A387B6A411D11054000865EE /* Sources */, 335 | A387B6B611D11054000865EE /* Frameworks */, 336 | ); 337 | buildRules = ( 338 | ); 339 | dependencies = ( 340 | ); 341 | name = "LRToolkit-iOS"; 342 | productName = LRToolkit; 343 | productReference = A387B6BB11D11054000865EE /* libLRToolkit-iOS.a */; 344 | productType = "com.apple.product-type.library.static"; 345 | }; 346 | D2AAC07D0554694100DB518D /* LRToolkit-iPad */ = { 347 | isa = PBXNativeTarget; 348 | buildConfigurationList = 1DEB921E08733DC00010E9CD /* Build configuration list for PBXNativeTarget "LRToolkit-iPad" */; 349 | buildPhases = ( 350 | D2AAC07A0554694100DB518D /* Headers */, 351 | D2AAC07B0554694100DB518D /* Sources */, 352 | D2AAC07C0554694100DB518D /* Frameworks */, 353 | ); 354 | buildRules = ( 355 | ); 356 | dependencies = ( 357 | ); 358 | name = "LRToolkit-iPad"; 359 | productName = LRToolkit; 360 | productReference = D2AAC07E0554694100DB518D /* libLRToolkit-iPad.a */; 361 | productType = "com.apple.product-type.library.static"; 362 | }; 363 | /* End PBXNativeTarget section */ 364 | 365 | /* Begin PBXProject section */ 366 | 0867D690FE84028FC02AAC07 /* Project object */ = { 367 | isa = PBXProject; 368 | buildConfigurationList = 1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "LRToolkit" */; 369 | compatibilityVersion = "Xcode 3.1"; 370 | hasScannedForEncodings = 1; 371 | mainGroup = 0867D691FE84028FC02AAC07 /* LRToolkit */; 372 | productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; 373 | projectDirPath = ""; 374 | projectRoot = ""; 375 | targets = ( 376 | D2AAC07D0554694100DB518D /* LRToolkit-iPad */, 377 | A387B68F11D11054000865EE /* LRToolkit-iOS */, 378 | ); 379 | }; 380 | /* End PBXProject section */ 381 | 382 | /* Begin PBXSourcesBuildPhase section */ 383 | A387B6A411D11054000865EE /* Sources */ = { 384 | isa = PBXSourcesBuildPhase; 385 | buildActionMask = 2147483647; 386 | files = ( 387 | A387B6A511D11054000865EE /* UIImage+Alpha.m in Sources */, 388 | A387B6A611D11054000865EE /* UIImage+RoundedCorner.m in Sources */, 389 | A387B6A711D11054000865EE /* UIImage+Resize.m in Sources */, 390 | A387B6A811D11054000865EE /* UIColor+Hex.m in Sources */, 391 | A387B6A911D11054000865EE /* UIImageView+LRAdditions.m in Sources */, 392 | A387B6AA11D11054000865EE /* UIView+Position.m in Sources */, 393 | A387B6AB11D11054000865EE /* UIToolbar+LRAdditions.m in Sources */, 394 | A387B6AC11D11054000865EE /* NSData+Base64.m in Sources */, 395 | A387B6AD11D11054000865EE /* NSString+Hashing.m in Sources */, 396 | A387B6AE11D11054000865EE /* NSArray+Indexing.m in Sources */, 397 | A387B6AF11D11054000865EE /* NSURL+StringFormat.m in Sources */, 398 | A387B6B011D11054000865EE /* NSString+GHTimeInterval.m in Sources */, 399 | A387B6B111D11054000865EE /* NSString+FileSize.m in Sources */, 400 | A387B6B211D11054000865EE /* LRUIColorPallette.m in Sources */, 401 | A387B6B311D11054000865EE /* UIColor+SharedPallette.m in Sources */, 402 | A387B6B411D11054000865EE /* LRTableViewCollection.m in Sources */, 403 | ); 404 | runOnlyForDeploymentPostprocessing = 0; 405 | }; 406 | D2AAC07B0554694100DB518D /* Sources */ = { 407 | isa = PBXSourcesBuildPhase; 408 | buildActionMask = 2147483647; 409 | files = ( 410 | A387AD2011CE9215000865EE /* UIImage+Alpha.m in Sources */, 411 | A387AD2211CE9215000865EE /* UIImage+RoundedCorner.m in Sources */, 412 | A387AD2411CE9215000865EE /* UIImage+Resize.m in Sources */, 413 | A387AD2811CE9244000865EE /* UIColor+Hex.m in Sources */, 414 | A387AD3011CE9253000865EE /* UIImageView+LRAdditions.m in Sources */, 415 | A387AD3211CE9253000865EE /* UIView+Position.m in Sources */, 416 | A387AD3411CE9253000865EE /* UIToolbar+LRAdditions.m in Sources */, 417 | A387AD4311CE927B000865EE /* NSData+Base64.m in Sources */, 418 | A387AD4511CE927B000865EE /* NSString+Hashing.m in Sources */, 419 | A387AD4711CE927B000865EE /* NSArray+Indexing.m in Sources */, 420 | A387AD4911CE927B000865EE /* NSURL+StringFormat.m in Sources */, 421 | A387AD4B11CE927B000865EE /* NSString+GHTimeInterval.m in Sources */, 422 | A387AD4D11CE927B000865EE /* NSString+FileSize.m in Sources */, 423 | A387AD5111CE9613000865EE /* LRUIColorPallette.m in Sources */, 424 | A387AD6711CE9704000865EE /* UIColor+SharedPallette.m in Sources */, 425 | A387ADB811CE9A99000865EE /* LRTableViewCollection.m in Sources */, 426 | A387ADC511CE9AE0000865EE /* LRPopoverManager.m in Sources */, 427 | ); 428 | runOnlyForDeploymentPostprocessing = 0; 429 | }; 430 | /* End PBXSourcesBuildPhase section */ 431 | 432 | /* Begin XCBuildConfiguration section */ 433 | 1DEB921F08733DC00010E9CD /* Debug */ = { 434 | isa = XCBuildConfiguration; 435 | buildSettings = { 436 | ALWAYS_SEARCH_USER_PATHS = NO; 437 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 438 | COPY_PHASE_STRIP = NO; 439 | DSTROOT = /tmp/LRToolkit.dst; 440 | GCC_DYNAMIC_NO_PIC = NO; 441 | GCC_ENABLE_FIX_AND_CONTINUE = YES; 442 | GCC_MODEL_TUNING = G5; 443 | GCC_OPTIMIZATION_LEVEL = 0; 444 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 445 | GCC_PREFIX_HEADER = LRToolkit_Prefix.pch; 446 | INSTALL_PATH = /usr/local/lib; 447 | PRODUCT_NAME = "LRToolkit-iPad"; 448 | SDKROOT = iphoneos3.2; 449 | }; 450 | name = Debug; 451 | }; 452 | 1DEB922008733DC00010E9CD /* Release */ = { 453 | isa = XCBuildConfiguration; 454 | buildSettings = { 455 | ALWAYS_SEARCH_USER_PATHS = NO; 456 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 457 | DSTROOT = /tmp/LRToolkit.dst; 458 | GCC_MODEL_TUNING = G5; 459 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 460 | GCC_PREFIX_HEADER = LRToolkit_Prefix.pch; 461 | INSTALL_PATH = /usr/local/lib; 462 | PRODUCT_NAME = "LRToolkit-iPad"; 463 | SDKROOT = iphoneos3.2; 464 | }; 465 | name = Release; 466 | }; 467 | 1DEB922308733DC00010E9CD /* Debug */ = { 468 | isa = XCBuildConfiguration; 469 | buildSettings = { 470 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 471 | GCC_C_LANGUAGE_STANDARD = c99; 472 | GCC_OPTIMIZATION_LEVEL = 0; 473 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 474 | GCC_WARN_UNUSED_VARIABLE = YES; 475 | OTHER_LDFLAGS = "-ObjC"; 476 | PREBINDING = NO; 477 | SDKROOT = iphoneos4.0; 478 | }; 479 | name = Debug; 480 | }; 481 | 1DEB922408733DC00010E9CD /* Release */ = { 482 | isa = XCBuildConfiguration; 483 | buildSettings = { 484 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 485 | GCC_C_LANGUAGE_STANDARD = c99; 486 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 487 | GCC_WARN_UNUSED_VARIABLE = YES; 488 | OTHER_LDFLAGS = "-ObjC"; 489 | PREBINDING = NO; 490 | SDKROOT = iphoneos4.0; 491 | }; 492 | name = Release; 493 | }; 494 | A387B6B911D11054000865EE /* Debug */ = { 495 | isa = XCBuildConfiguration; 496 | buildSettings = { 497 | ALWAYS_SEARCH_USER_PATHS = NO; 498 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 499 | COPY_PHASE_STRIP = NO; 500 | DSTROOT = /tmp/LRToolkit.dst; 501 | GCC_DYNAMIC_NO_PIC = NO; 502 | GCC_ENABLE_FIX_AND_CONTINUE = YES; 503 | GCC_MODEL_TUNING = G5; 504 | GCC_OPTIMIZATION_LEVEL = 0; 505 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 506 | GCC_PREFIX_HEADER = LRToolkit_Prefix.pch; 507 | INSTALL_PATH = /usr/local/lib; 508 | IPHONEOS_DEPLOYMENT_TARGET = 3.0; 509 | PRODUCT_NAME = "LRToolkit-iOS"; 510 | }; 511 | name = Debug; 512 | }; 513 | A387B6BA11D11054000865EE /* Release */ = { 514 | isa = XCBuildConfiguration; 515 | buildSettings = { 516 | ALWAYS_SEARCH_USER_PATHS = NO; 517 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 518 | DSTROOT = /tmp/LRToolkit.dst; 519 | GCC_MODEL_TUNING = G5; 520 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 521 | GCC_PREFIX_HEADER = LRToolkit_Prefix.pch; 522 | INSTALL_PATH = /usr/local/lib; 523 | IPHONEOS_DEPLOYMENT_TARGET = 3.0; 524 | PRODUCT_NAME = "LRToolkit-iOS"; 525 | }; 526 | name = Release; 527 | }; 528 | /* End XCBuildConfiguration section */ 529 | 530 | /* Begin XCConfigurationList section */ 531 | 1DEB921E08733DC00010E9CD /* Build configuration list for PBXNativeTarget "LRToolkit-iPad" */ = { 532 | isa = XCConfigurationList; 533 | buildConfigurations = ( 534 | 1DEB921F08733DC00010E9CD /* Debug */, 535 | 1DEB922008733DC00010E9CD /* Release */, 536 | ); 537 | defaultConfigurationIsVisible = 0; 538 | defaultConfigurationName = Release; 539 | }; 540 | 1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "LRToolkit" */ = { 541 | isa = XCConfigurationList; 542 | buildConfigurations = ( 543 | 1DEB922308733DC00010E9CD /* Debug */, 544 | 1DEB922408733DC00010E9CD /* Release */, 545 | ); 546 | defaultConfigurationIsVisible = 0; 547 | defaultConfigurationName = Release; 548 | }; 549 | A387B6B811D11054000865EE /* Build configuration list for PBXNativeTarget "LRToolkit-iOS" */ = { 550 | isa = XCConfigurationList; 551 | buildConfigurations = ( 552 | A387B6B911D11054000865EE /* Debug */, 553 | A387B6BA11D11054000865EE /* Release */, 554 | ); 555 | defaultConfigurationIsVisible = 0; 556 | defaultConfigurationName = Release; 557 | }; 558 | /* End XCConfigurationList section */ 559 | }; 560 | rootObject = 0867D690FE84028FC02AAC07 /* Project object */; 561 | } 562 | -------------------------------------------------------------------------------- /LRToolkit.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /LRToolkit.xcodeproj/project.xcworkspace/xcuserdata/luke.xcuserdatad/WorkspaceState.xcuserstate: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | $archiver 6 | NSKeyedArchiver 7 | $objects 8 | 9 | $null 10 | 11 | $class 12 | 13 | CF$UID 14 | 48 15 | 16 | NS.keys 17 | 18 | 19 | CF$UID 20 | 2 21 | 22 | 23 | CF$UID 24 | 3 25 | 26 | 27 | NS.objects 28 | 29 | 30 | CF$UID 31 | 4 32 | 33 | 34 | CF$UID 35 | 181 36 | 37 | 38 | 39 | IDEWorkspaceWindowController_0 40 | IDEWorkspaceDocument 41 | 42 | $class 43 | 44 | CF$UID 45 | 62 46 | 47 | NS.keys 48 | 49 | 50 | CF$UID 51 | 5 52 | 53 | 54 | CF$UID 55 | 6 56 | 57 | 58 | CF$UID 59 | 7 60 | 61 | 62 | CF$UID 63 | 8 64 | 65 | 66 | CF$UID 67 | 9 68 | 69 | 70 | NS.objects 71 | 72 | 73 | CF$UID 74 | 10 75 | 76 | 77 | CF$UID 78 | 12 79 | 80 | 81 | CF$UID 82 | 9 83 | 84 | 85 | CF$UID 86 | 13 87 | 88 | 89 | CF$UID 90 | 14 91 | 92 | 93 | 94 | IDEOrderedWorkspaceTabControllers 95 | IDEUserWantsMiniDebuggingConsole 96 | IDEActiveWorkspaceTabController 97 | IDEWindowFrame 98 | IDEWorkspaceTabController_0 99 | 100 | $class 101 | 102 | CF$UID 103 | 11 104 | 105 | NS.objects 106 | 107 | 108 | CF$UID 109 | 9 110 | 111 | 112 | 113 | 114 | $classes 115 | 116 | NSArray 117 | NSObject 118 | 119 | $classname 120 | NSArray 121 | 122 | 0 123 | {{0, 0}, {1920, 1178}} 124 | 125 | $class 126 | 127 | CF$UID 128 | 62 129 | 130 | NS.keys 131 | 132 | 133 | CF$UID 134 | 15 135 | 136 | 137 | CF$UID 138 | 16 139 | 140 | 141 | CF$UID 142 | 17 143 | 144 | 145 | CF$UID 146 | 18 147 | 148 | 149 | CF$UID 150 | 19 151 | 152 | 153 | CF$UID 154 | 20 155 | 156 | 157 | CF$UID 158 | 21 159 | 160 | 161 | NS.objects 162 | 163 | 164 | CF$UID 165 | 22 166 | 167 | 168 | CF$UID 169 | 93 170 | 171 | 172 | CF$UID 173 | 141 174 | 175 | 176 | CF$UID 177 | 147 178 | 179 | 180 | CF$UID 181 | 171 182 | 183 | 184 | CF$UID 185 | 93 186 | 187 | 188 | CF$UID 189 | 180 190 | 191 | 192 | 193 | IDEEditorArea 194 | IDEShowNavigator 195 | IDEWorkspaceTabControllerUtilityAreaSplitView 196 | IDENavigatorArea 197 | IDEWorkspaceTabControllerDesignAreaSplitView 198 | IDEShowUtilities 199 | IDETabLabel 200 | 201 | $class 202 | 203 | CF$UID 204 | 62 205 | 206 | NS.keys 207 | 208 | 209 | CF$UID 210 | 23 211 | 212 | 213 | CF$UID 214 | 24 215 | 216 | 217 | CF$UID 218 | 25 219 | 220 | 221 | CF$UID 222 | 26 223 | 224 | 225 | NS.objects 226 | 227 | 228 | CF$UID 229 | 27 230 | 231 | 232 | CF$UID 233 | 64 234 | 235 | 236 | CF$UID 237 | 12 238 | 239 | 240 | CF$UID 241 | 93 242 | 243 | 244 | 245 | IDEEditorMode_Standard 246 | IDEEditorMode_Genius 247 | ShowDebuggerArea 248 | EditorMode 249 | 250 | $class 251 | 252 | CF$UID 253 | 62 254 | 255 | NS.keys 256 | 257 | 258 | CF$UID 259 | 28 260 | 261 | 262 | NS.objects 263 | 264 | 265 | CF$UID 266 | 29 267 | 268 | 269 | 270 | EditorStates 271 | 272 | $class 273 | 274 | CF$UID 275 | 48 276 | 277 | NS.keys 278 | 279 | 280 | CF$UID 281 | 28 282 | 283 | 284 | CF$UID 285 | 30 286 | 287 | 288 | NS.objects 289 | 290 | 291 | CF$UID 292 | 31 293 | 294 | 295 | CF$UID 296 | 12 297 | 298 | 299 | 300 | SelectedEditorState 301 | 302 | $class 303 | 304 | CF$UID 305 | 63 306 | 307 | NS.objects 308 | 309 | 310 | CF$UID 311 | 32 312 | 313 | 314 | 315 | 316 | $class 317 | 318 | CF$UID 319 | 62 320 | 321 | NS.keys 322 | 323 | 324 | CF$UID 325 | 33 326 | 327 | 328 | CF$UID 329 | 34 330 | 331 | 332 | CF$UID 333 | 35 334 | 335 | 336 | CF$UID 337 | 36 338 | 339 | 340 | CF$UID 341 | 37 342 | 343 | 344 | CF$UID 345 | 38 346 | 347 | 348 | NS.objects 349 | 350 | 351 | CF$UID 352 | 39 353 | 354 | 355 | CF$UID 356 | 49 357 | 358 | 359 | CF$UID 360 | 57 361 | 362 | 363 | CF$UID 364 | 60 365 | 366 | 367 | CF$UID 368 | 61 369 | 370 | 371 | CF$UID 372 | 52 373 | 374 | 375 | 376 | EditorState 377 | ArchivableRepresentation 378 | DocumentURL 379 | FileDataType 380 | DocumentExtensionIdentifier 381 | HistoryMenuDescription 382 | 383 | $class 384 | 385 | CF$UID 386 | 48 387 | 388 | NS.keys 389 | 390 | 391 | CF$UID 392 | 40 393 | 394 | 395 | CF$UID 396 | 41 397 | 398 | 399 | NS.objects 400 | 401 | 402 | CF$UID 403 | 42 404 | 405 | 406 | CF$UID 407 | 47 408 | 409 | 410 | 411 | SelectedDocumentLocations 412 | VisibleCharacterRange 413 | 414 | $class 415 | 416 | CF$UID 417 | 11 418 | 419 | NS.objects 420 | 421 | 422 | CF$UID 423 | 43 424 | 425 | 426 | 427 | 428 | $class 429 | 430 | CF$UID 431 | 46 432 | 433 | characterRangeLen 434 | 0 435 | characterRangeLoc 436 | 215 437 | documentURL 438 | 439 | CF$UID 440 | 44 441 | 442 | endingColumnNumber 443 | -1 444 | endingLineNumber 445 | -1 446 | startingColumnNumber 447 | -1 448 | startingLineNumber 449 | -1 450 | timestamp 451 | 452 | CF$UID 453 | 45 454 | 455 | 456 | file://localhost/Users/luke/Code/Xcode/Projects/LRToolkit/Unit%20Tests/MyExampleClass.m 457 | 298746015.566239 458 | 459 | $classes 460 | 461 | DVTTextDocumentLocation 462 | DVTDocumentLocation 463 | NSObject 464 | 465 | $classname 466 | DVTTextDocumentLocation 467 | 468 | {0, 216} 469 | 470 | $classes 471 | 472 | NSDictionary 473 | NSObject 474 | 475 | $classname 476 | NSDictionary 477 | 478 | 479 | $class 480 | 481 | CF$UID 482 | 56 483 | 484 | DocumentLocation 485 | 486 | CF$UID 487 | 55 488 | 489 | DomainIdentifier 490 | 491 | CF$UID 492 | 50 493 | 494 | IdentifierPath 495 | 496 | CF$UID 497 | 51 498 | 499 | 500 | Xcode.IDENavigableItemDomain.WorkspaceStructure 501 | 502 | $class 503 | 504 | CF$UID 505 | 11 506 | 507 | NS.objects 508 | 509 | 510 | CF$UID 511 | 52 512 | 513 | 514 | CF$UID 515 | 53 516 | 517 | 518 | CF$UID 519 | 54 520 | 521 | 522 | 523 | MyExampleClass.m 524 | Unit Tests 525 | LRToolkit 526 | $null 527 | 528 | $classes 529 | 530 | IDENavigableItemArchivableRepresentation 531 | NSObject 532 | 533 | $classname 534 | IDENavigableItemArchivableRepresentation 535 | 536 | 537 | $class 538 | 539 | CF$UID 540 | 59 541 | 542 | NS.base 543 | 544 | CF$UID 545 | 0 546 | 547 | NS.relative 548 | 549 | CF$UID 550 | 58 551 | 552 | 553 | file://localhost/Users/luke/Code/Xcode/Projects/LRToolkit/Unit%20Tests/MyExampleClass.m 554 | 555 | $classes 556 | 557 | NSURL 558 | NSObject 559 | 560 | $classname 561 | NSURL 562 | 563 | public.objective-c-source 564 | Xcode.IDEKit.EditorDocument.SourceCode 565 | 566 | $classes 567 | 568 | NSMutableDictionary 569 | NSDictionary 570 | NSObject 571 | 572 | $classname 573 | NSMutableDictionary 574 | 575 | 576 | $classes 577 | 578 | NSMutableArray 579 | NSArray 580 | NSObject 581 | 582 | $classname 583 | NSMutableArray 584 | 585 | 586 | $class 587 | 588 | CF$UID 589 | 62 590 | 591 | NS.keys 592 | 593 | 594 | CF$UID 595 | 65 596 | 597 | 598 | CF$UID 599 | 66 600 | 601 | 602 | CF$UID 603 | 28 604 | 605 | 606 | NS.objects 607 | 608 | 609 | CF$UID 610 | 12 611 | 612 | 613 | CF$UID 614 | 67 615 | 616 | 617 | CF$UID 618 | 114 619 | 620 | 621 | 622 | ManualMode 623 | GeniusLayout 624 | 625 | $class 626 | 627 | CF$UID 628 | 62 629 | 630 | NS.keys 631 | 632 | 633 | CF$UID 634 | 28 635 | 636 | 637 | NS.objects 638 | 639 | 640 | CF$UID 641 | 68 642 | 643 | 644 | 645 | 646 | $class 647 | 648 | CF$UID 649 | 48 650 | 651 | NS.keys 652 | 653 | 654 | CF$UID 655 | 28 656 | 657 | 658 | CF$UID 659 | 30 660 | 661 | 662 | NS.objects 663 | 664 | 665 | CF$UID 666 | 69 667 | 668 | 669 | CF$UID 670 | 12 671 | 672 | 673 | 674 | 675 | $class 676 | 677 | CF$UID 678 | 63 679 | 680 | NS.objects 681 | 682 | 683 | CF$UID 684 | 70 685 | 686 | 687 | 688 | 689 | $class 690 | 691 | CF$UID 692 | 62 693 | 694 | NS.keys 695 | 696 | 697 | CF$UID 698 | 33 699 | 700 | 701 | CF$UID 702 | 34 703 | 704 | 705 | CF$UID 706 | 35 707 | 708 | 709 | CF$UID 710 | 36 711 | 712 | 713 | CF$UID 714 | 37 715 | 716 | 717 | CF$UID 718 | 38 719 | 720 | 721 | NS.objects 722 | 723 | 724 | CF$UID 725 | 71 726 | 727 | 728 | CF$UID 729 | 105 730 | 731 | 732 | CF$UID 733 | 109 734 | 735 | 736 | CF$UID 737 | 111 738 | 739 | 740 | CF$UID 741 | 112 742 | 743 | 744 | CF$UID 745 | 113 746 | 747 | 748 | 749 | 750 | $class 751 | 752 | CF$UID 753 | 48 754 | 755 | NS.keys 756 | 757 | 758 | CF$UID 759 | 40 760 | 761 | 762 | CF$UID 763 | 72 764 | 765 | 766 | NS.objects 767 | 768 | 769 | CF$UID 770 | 73 771 | 772 | 773 | CF$UID 774 | 95 775 | 776 | 777 | 778 | Xcode3ProjectEditor.sourceList.splitview 779 | 780 | $class 781 | 782 | CF$UID 783 | 11 784 | 785 | NS.objects 786 | 787 | 788 | CF$UID 789 | 74 790 | 791 | 792 | 793 | 794 | $class 795 | 796 | CF$UID 797 | 94 798 | 799 | documentURL 800 | 801 | CF$UID 802 | 75 803 | 804 | selection 805 | 806 | CF$UID 807 | 77 808 | 809 | timestamp 810 | 811 | CF$UID 812 | 76 813 | 814 | 815 | file://localhost/Users/luke/Code/Xcode/Projects/LRToolkit/LRToolkit.xcodeproj/ 816 | 298746224.33337098 817 | 818 | $class 819 | 820 | CF$UID 821 | 62 822 | 823 | NS.keys 824 | 825 | 826 | CF$UID 827 | 78 828 | 829 | 830 | CF$UID 831 | 79 832 | 833 | 834 | CF$UID 835 | 80 836 | 837 | 838 | NS.objects 839 | 840 | 841 | CF$UID 842 | 81 843 | 844 | 845 | CF$UID 846 | 82 847 | 848 | 849 | CF$UID 850 | 83 851 | 852 | 853 | 854 | Project 855 | Editor 856 | Xcode3BuildSettingsEditorLocations 857 | LRToolkit 858 | Xcode3BuildSettingsEditor 859 | 860 | $class 861 | 862 | CF$UID 863 | 11 864 | 865 | NS.objects 866 | 867 | 868 | CF$UID 869 | 84 870 | 871 | 872 | 873 | 874 | $class 875 | 876 | CF$UID 877 | 62 878 | 879 | NS.keys 880 | 881 | 882 | CF$UID 883 | 85 884 | 885 | 886 | CF$UID 887 | 86 888 | 889 | 890 | CF$UID 891 | 87 892 | 893 | 894 | CF$UID 895 | 88 896 | 897 | 898 | CF$UID 899 | 89 900 | 901 | 902 | CF$UID 903 | 90 904 | 905 | 906 | NS.objects 907 | 908 | 909 | CF$UID 910 | 91 911 | 912 | 913 | CF$UID 914 | 92 915 | 916 | 917 | CF$UID 918 | 12 919 | 920 | 921 | CF$UID 922 | 12 923 | 924 | 925 | CF$UID 926 | 93 927 | 928 | 929 | CF$UID 930 | 93 931 | 932 | 933 | 934 | Collapsed Build Property Categories 935 | Selected Build Properties 936 | Xcode3BuildSettingsEditorDisplayMode 937 | Xcode3BuildPropertyValueDisplayMode 938 | Xcode3BuildSettingsEditorMode 939 | Xcode3BuildPropertyNameDisplayMode 940 | 941 | $class 942 | 943 | CF$UID 944 | 63 945 | 946 | NS.objects 947 | 948 | 949 | 950 | $class 951 | 952 | CF$UID 953 | 63 954 | 955 | NS.objects 956 | 957 | 958 | 1 959 | 960 | $classes 961 | 962 | Xcode3ProjectDocumentLocation 963 | DVTDocumentLocation 964 | NSObject 965 | 966 | $classname 967 | Xcode3ProjectDocumentLocation 968 | 969 | 970 | $class 971 | 972 | CF$UID 973 | 62 974 | 975 | NS.keys 976 | 977 | 978 | CF$UID 979 | 96 980 | 981 | 982 | NS.objects 983 | 984 | 985 | CF$UID 986 | 97 987 | 988 | 989 | 990 | DVTSplitViewItems 991 | 992 | $class 993 | 994 | CF$UID 995 | 63 996 | 997 | NS.objects 998 | 999 | 1000 | CF$UID 1001 | 98 1002 | 1003 | 1004 | CF$UID 1005 | 103 1006 | 1007 | 1008 | 1009 | 1010 | $class 1011 | 1012 | CF$UID 1013 | 48 1014 | 1015 | NS.keys 1016 | 1017 | 1018 | CF$UID 1019 | 99 1020 | 1021 | 1022 | CF$UID 1023 | 100 1024 | 1025 | 1026 | NS.objects 1027 | 1028 | 1029 | CF$UID 1030 | 101 1031 | 1032 | 1033 | CF$UID 1034 | 102 1035 | 1036 | 1037 | 1038 | DVTIdentifier 1039 | DVTViewMagnitude 1040 | 1041 | 170 1042 | 1043 | $class 1044 | 1045 | CF$UID 1046 | 48 1047 | 1048 | NS.keys 1049 | 1050 | 1051 | CF$UID 1052 | 99 1053 | 1054 | 1055 | CF$UID 1056 | 100 1057 | 1058 | 1059 | NS.objects 1060 | 1061 | 1062 | CF$UID 1063 | 101 1064 | 1065 | 1066 | CF$UID 1067 | 104 1068 | 1069 | 1070 | 1071 | 1230 1072 | 1073 | $class 1074 | 1075 | CF$UID 1076 | 56 1077 | 1078 | DocumentLocation 1079 | 1080 | CF$UID 1081 | 108 1082 | 1083 | DomainIdentifier 1084 | 1085 | CF$UID 1086 | 50 1087 | 1088 | IdentifierPath 1089 | 1090 | CF$UID 1091 | 106 1092 | 1093 | 1094 | 1095 | $class 1096 | 1097 | CF$UID 1098 | 11 1099 | 1100 | NS.objects 1101 | 1102 | 1103 | CF$UID 1104 | 107 1105 | 1106 | 1107 | 1108 | LRToolkit 1109 | $null 1110 | 1111 | $class 1112 | 1113 | CF$UID 1114 | 59 1115 | 1116 | NS.base 1117 | 1118 | CF$UID 1119 | 0 1120 | 1121 | NS.relative 1122 | 1123 | CF$UID 1124 | 110 1125 | 1126 | 1127 | file://localhost/Users/luke/Code/Xcode/Projects/LRToolkit/LRToolkit.xcodeproj/ 1128 | com.apple.xcode.project 1129 | Xcode.Xcode3ProjectSupport.EditorDocument.Xcode3Project 1130 | LRToolkit 1131 | 1132 | $class 1133 | 1134 | CF$UID 1135 | 48 1136 | 1137 | NS.keys 1138 | 1139 | 1140 | CF$UID 1141 | 28 1142 | 1143 | 1144 | CF$UID 1145 | 30 1146 | 1147 | 1148 | NS.objects 1149 | 1150 | 1151 | CF$UID 1152 | 115 1153 | 1154 | 1155 | CF$UID 1156 | 12 1157 | 1158 | 1159 | 1160 | 1161 | $class 1162 | 1163 | CF$UID 1164 | 63 1165 | 1166 | NS.objects 1167 | 1168 | 1169 | CF$UID 1170 | 116 1171 | 1172 | 1173 | 1174 | 1175 | $class 1176 | 1177 | CF$UID 1178 | 62 1179 | 1180 | NS.keys 1181 | 1182 | 1183 | CF$UID 1184 | 33 1185 | 1186 | 1187 | CF$UID 1188 | 34 1189 | 1190 | 1191 | CF$UID 1192 | 35 1193 | 1194 | 1195 | CF$UID 1196 | 36 1197 | 1198 | 1199 | CF$UID 1200 | 37 1201 | 1202 | 1203 | CF$UID 1204 | 38 1205 | 1206 | 1207 | NS.objects 1208 | 1209 | 1210 | CF$UID 1211 | 117 1212 | 1213 | 1214 | CF$UID 1215 | 135 1216 | 1217 | 1218 | CF$UID 1219 | 139 1220 | 1221 | 1222 | CF$UID 1223 | 111 1224 | 1225 | 1226 | CF$UID 1227 | 112 1228 | 1229 | 1230 | CF$UID 1231 | 113 1232 | 1233 | 1234 | 1235 | 1236 | $class 1237 | 1238 | CF$UID 1239 | 48 1240 | 1241 | NS.keys 1242 | 1243 | 1244 | CF$UID 1245 | 40 1246 | 1247 | 1248 | CF$UID 1249 | 72 1250 | 1251 | 1252 | NS.objects 1253 | 1254 | 1255 | CF$UID 1256 | 118 1257 | 1258 | 1259 | CF$UID 1260 | 129 1261 | 1262 | 1263 | 1264 | 1265 | $class 1266 | 1267 | CF$UID 1268 | 11 1269 | 1270 | NS.objects 1271 | 1272 | 1273 | CF$UID 1274 | 119 1275 | 1276 | 1277 | 1278 | 1279 | $class 1280 | 1281 | CF$UID 1282 | 94 1283 | 1284 | documentURL 1285 | 1286 | CF$UID 1287 | 75 1288 | 1289 | selection 1290 | 1291 | CF$UID 1292 | 121 1293 | 1294 | timestamp 1295 | 1296 | CF$UID 1297 | 120 1298 | 1299 | 1300 | 298746224.33281302 1301 | 1302 | $class 1303 | 1304 | CF$UID 1305 | 62 1306 | 1307 | NS.keys 1308 | 1309 | 1310 | CF$UID 1311 | 78 1312 | 1313 | 1314 | CF$UID 1315 | 79 1316 | 1317 | 1318 | CF$UID 1319 | 122 1320 | 1321 | 1322 | NS.objects 1323 | 1324 | 1325 | CF$UID 1326 | 123 1327 | 1328 | 1329 | CF$UID 1330 | 124 1331 | 1332 | 1333 | CF$UID 1334 | 125 1335 | 1336 | 1337 | 1338 | Xcode3BuildSettingsEditorLocations 1339 | LRToolkit 1340 | Xcode3BuildSettingsEditor 1341 | 1342 | $class 1343 | 1344 | CF$UID 1345 | 11 1346 | 1347 | NS.objects 1348 | 1349 | 1350 | CF$UID 1351 | 126 1352 | 1353 | 1354 | 1355 | 1356 | $class 1357 | 1358 | CF$UID 1359 | 62 1360 | 1361 | NS.keys 1362 | 1363 | 1364 | CF$UID 1365 | 85 1366 | 1367 | 1368 | CF$UID 1369 | 86 1370 | 1371 | 1372 | CF$UID 1373 | 87 1374 | 1375 | 1376 | CF$UID 1377 | 88 1378 | 1379 | 1380 | CF$UID 1381 | 89 1382 | 1383 | 1384 | CF$UID 1385 | 90 1386 | 1387 | 1388 | NS.objects 1389 | 1390 | 1391 | CF$UID 1392 | 127 1393 | 1394 | 1395 | CF$UID 1396 | 128 1397 | 1398 | 1399 | CF$UID 1400 | 12 1401 | 1402 | 1403 | CF$UID 1404 | 12 1405 | 1406 | 1407 | CF$UID 1408 | 93 1409 | 1410 | 1411 | CF$UID 1412 | 93 1413 | 1414 | 1415 | 1416 | 1417 | $class 1418 | 1419 | CF$UID 1420 | 63 1421 | 1422 | NS.objects 1423 | 1424 | 1425 | 1426 | $class 1427 | 1428 | CF$UID 1429 | 63 1430 | 1431 | NS.objects 1432 | 1433 | 1434 | 1435 | $class 1436 | 1437 | CF$UID 1438 | 62 1439 | 1440 | NS.keys 1441 | 1442 | 1443 | CF$UID 1444 | 96 1445 | 1446 | 1447 | NS.objects 1448 | 1449 | 1450 | CF$UID 1451 | 130 1452 | 1453 | 1454 | 1455 | 1456 | $class 1457 | 1458 | CF$UID 1459 | 63 1460 | 1461 | NS.objects 1462 | 1463 | 1464 | CF$UID 1465 | 131 1466 | 1467 | 1468 | CF$UID 1469 | 133 1470 | 1471 | 1472 | 1473 | 1474 | $class 1475 | 1476 | CF$UID 1477 | 48 1478 | 1479 | NS.keys 1480 | 1481 | 1482 | CF$UID 1483 | 99 1484 | 1485 | 1486 | CF$UID 1487 | 100 1488 | 1489 | 1490 | NS.objects 1491 | 1492 | 1493 | CF$UID 1494 | 101 1495 | 1496 | 1497 | CF$UID 1498 | 132 1499 | 1500 | 1501 | 1502 | 170 1503 | 1504 | $class 1505 | 1506 | CF$UID 1507 | 48 1508 | 1509 | NS.keys 1510 | 1511 | 1512 | CF$UID 1513 | 99 1514 | 1515 | 1516 | CF$UID 1517 | 100 1518 | 1519 | 1520 | NS.objects 1521 | 1522 | 1523 | CF$UID 1524 | 101 1525 | 1526 | 1527 | CF$UID 1528 | 134 1529 | 1530 | 1531 | 1532 | 1230 1533 | 1534 | $class 1535 | 1536 | CF$UID 1537 | 56 1538 | 1539 | DocumentLocation 1540 | 1541 | CF$UID 1542 | 138 1543 | 1544 | DomainIdentifier 1545 | 1546 | CF$UID 1547 | 50 1548 | 1549 | IdentifierPath 1550 | 1551 | CF$UID 1552 | 136 1553 | 1554 | 1555 | 1556 | $class 1557 | 1558 | CF$UID 1559 | 11 1560 | 1561 | NS.objects 1562 | 1563 | 1564 | CF$UID 1565 | 137 1566 | 1567 | 1568 | 1569 | LRToolkit 1570 | $null 1571 | 1572 | $class 1573 | 1574 | CF$UID 1575 | 59 1576 | 1577 | NS.base 1578 | 1579 | CF$UID 1580 | 0 1581 | 1582 | NS.relative 1583 | 1584 | CF$UID 1585 | 140 1586 | 1587 | 1588 | file://localhost/Users/luke/Code/Xcode/Projects/LRToolkit/LRToolkit.xcodeproj/ 1589 | 1590 | $class 1591 | 1592 | CF$UID 1593 | 62 1594 | 1595 | NS.keys 1596 | 1597 | 1598 | CF$UID 1599 | 96 1600 | 1601 | 1602 | NS.objects 1603 | 1604 | 1605 | CF$UID 1606 | 142 1607 | 1608 | 1609 | 1610 | 1611 | $class 1612 | 1613 | CF$UID 1614 | 63 1615 | 1616 | NS.objects 1617 | 1618 | 1619 | CF$UID 1620 | 143 1621 | 1622 | 1623 | CF$UID 1624 | 145 1625 | 1626 | 1627 | 1628 | 1629 | $class 1630 | 1631 | CF$UID 1632 | 48 1633 | 1634 | NS.keys 1635 | 1636 | 1637 | CF$UID 1638 | 99 1639 | 1640 | 1641 | CF$UID 1642 | 100 1643 | 1644 | 1645 | NS.objects 1646 | 1647 | 1648 | CF$UID 1649 | 101 1650 | 1651 | 1652 | CF$UID 1653 | 144 1654 | 1655 | 1656 | 1657 | 540 1658 | 1659 | $class 1660 | 1661 | CF$UID 1662 | 48 1663 | 1664 | NS.keys 1665 | 1666 | 1667 | CF$UID 1668 | 99 1669 | 1670 | 1671 | CF$UID 1672 | 100 1673 | 1674 | 1675 | NS.objects 1676 | 1677 | 1678 | CF$UID 1679 | 101 1680 | 1681 | 1682 | CF$UID 1683 | 146 1684 | 1685 | 1686 | 1687 | 565 1688 | 1689 | $class 1690 | 1691 | CF$UID 1692 | 62 1693 | 1694 | NS.keys 1695 | 1696 | 1697 | CF$UID 1698 | 148 1699 | 1700 | 1701 | CF$UID 1702 | 149 1703 | 1704 | 1705 | NS.objects 1706 | 1707 | 1708 | CF$UID 1709 | 149 1710 | 1711 | 1712 | CF$UID 1713 | 150 1714 | 1715 | 1716 | 1717 | SelectedNavigator 1718 | Xcode.IDEKit.Navigator.Structure 1719 | 1720 | $class 1721 | 1722 | CF$UID 1723 | 62 1724 | 1725 | NS.keys 1726 | 1727 | 1728 | CF$UID 1729 | 151 1730 | 1731 | 1732 | CF$UID 1733 | 152 1734 | 1735 | 1736 | CF$UID 1737 | 153 1738 | 1739 | 1740 | CF$UID 1741 | 154 1742 | 1743 | 1744 | CF$UID 1745 | 155 1746 | 1747 | 1748 | CF$UID 1749 | 156 1750 | 1751 | 1752 | NS.objects 1753 | 1754 | 1755 | CF$UID 1756 | 12 1757 | 1758 | 1759 | CF$UID 1760 | 157 1761 | 1762 | 1763 | CF$UID 1764 | 158 1765 | 1766 | 1767 | CF$UID 1768 | 12 1769 | 1770 | 1771 | CF$UID 1772 | 170 1773 | 1774 | 1775 | CF$UID 1776 | 12 1777 | 1778 | 1779 | 1780 | IDEUnsavedDocumentFilteringEnabled 1781 | IDESelectedObjects 1782 | IDEExpandedItems 1783 | IDESCMStatusFilteringEnabled 1784 | IDEVisibleRect 1785 | IDERecentDocumentFilteringEnabled 1786 | 1787 | $class 1788 | 1789 | CF$UID 1790 | 63 1791 | 1792 | NS.objects 1793 | 1794 | 1795 | 1796 | $class 1797 | 1798 | CF$UID 1799 | 63 1800 | 1801 | NS.objects 1802 | 1803 | 1804 | CF$UID 1805 | 159 1806 | 1807 | 1808 | CF$UID 1809 | 161 1810 | 1811 | 1812 | CF$UID 1813 | 164 1814 | 1815 | 1816 | CF$UID 1817 | 166 1818 | 1819 | 1820 | CF$UID 1821 | 168 1822 | 1823 | 1824 | CF$UID 1825 | 169 1826 | 1827 | 1828 | 1829 | 1830 | $class 1831 | 1832 | CF$UID 1833 | 63 1834 | 1835 | NS.objects 1836 | 1837 | 1838 | CF$UID 1839 | 160 1840 | 1841 | 1842 | 1843 | LRToolkit 1844 | 1845 | $class 1846 | 1847 | CF$UID 1848 | 63 1849 | 1850 | NS.objects 1851 | 1852 | 1853 | CF$UID 1854 | 162 1855 | 1856 | 1857 | CF$UID 1858 | 163 1859 | 1860 | 1861 | 1862 | Classes 1863 | UIKit 1864 | 1865 | $class 1866 | 1867 | CF$UID 1868 | 63 1869 | 1870 | NS.objects 1871 | 1872 | 1873 | CF$UID 1874 | 162 1875 | 1876 | 1877 | CF$UID 1878 | 165 1879 | 1880 | 1881 | 1882 | Foundation 1883 | 1884 | $class 1885 | 1886 | CF$UID 1887 | 63 1888 | 1889 | NS.objects 1890 | 1891 | 1892 | CF$UID 1893 | 160 1894 | 1895 | 1896 | CF$UID 1897 | 167 1898 | 1899 | 1900 | 1901 | Classes 1902 | 1903 | $class 1904 | 1905 | CF$UID 1906 | 63 1907 | 1908 | NS.objects 1909 | 1910 | 1911 | CF$UID 1912 | 160 1913 | 1914 | 1915 | 1916 | 1917 | $class 1918 | 1919 | CF$UID 1920 | 63 1921 | 1922 | NS.objects 1923 | 1924 | 1925 | CF$UID 1926 | 160 1927 | 1928 | 1929 | CF$UID 1930 | 53 1931 | 1932 | 1933 | 1934 | {{0, 0}, {259, 1061}} 1935 | 1936 | $class 1937 | 1938 | CF$UID 1939 | 62 1940 | 1941 | NS.keys 1942 | 1943 | 1944 | CF$UID 1945 | 96 1946 | 1947 | 1948 | NS.objects 1949 | 1950 | 1951 | CF$UID 1952 | 172 1953 | 1954 | 1955 | 1956 | 1957 | $class 1958 | 1959 | CF$UID 1960 | 63 1961 | 1962 | NS.objects 1963 | 1964 | 1965 | CF$UID 1966 | 173 1967 | 1968 | 1969 | CF$UID 1970 | 175 1971 | 1972 | 1973 | CF$UID 1974 | 177 1975 | 1976 | 1977 | 1978 | 1979 | $class 1980 | 1981 | CF$UID 1982 | 48 1983 | 1984 | NS.keys 1985 | 1986 | 1987 | CF$UID 1988 | 99 1989 | 1990 | 1991 | CF$UID 1992 | 100 1993 | 1994 | 1995 | NS.objects 1996 | 1997 | 1998 | CF$UID 1999 | 18 2000 | 2001 | 2002 | CF$UID 2003 | 174 2004 | 2005 | 2006 | 2007 | 260 2008 | 2009 | $class 2010 | 2011 | CF$UID 2012 | 48 2013 | 2014 | NS.keys 2015 | 2016 | 2017 | CF$UID 2018 | 99 2019 | 2020 | 2021 | CF$UID 2022 | 100 2023 | 2024 | 2025 | NS.objects 2026 | 2027 | 2028 | CF$UID 2029 | 15 2030 | 2031 | 2032 | CF$UID 2033 | 176 2034 | 2035 | 2036 | 2037 | 1400 2038 | 2039 | $class 2040 | 2041 | CF$UID 2042 | 48 2043 | 2044 | NS.keys 2045 | 2046 | 2047 | CF$UID 2048 | 99 2049 | 2050 | 2051 | CF$UID 2052 | 100 2053 | 2054 | 2055 | NS.objects 2056 | 2057 | 2058 | CF$UID 2059 | 178 2060 | 2061 | 2062 | CF$UID 2063 | 179 2064 | 2065 | 2066 | 2067 | IDEUtilitiesArea 2068 | 260 2069 | LRToolkit.xcodeproj 2070 | 2071 | $class 2072 | 2073 | CF$UID 2074 | 62 2075 | 2076 | NS.keys 2077 | 2078 | 2079 | CF$UID 2080 | 182 2081 | 2082 | 2083 | CF$UID 2084 | 183 2085 | 2086 | 2087 | CF$UID 2088 | 184 2089 | 2090 | 2091 | CF$UID 2092 | 185 2093 | 2094 | 2095 | CF$UID 2096 | 186 2097 | 2098 | 2099 | CF$UID 2100 | 187 2101 | 2102 | 2103 | CF$UID 2104 | 188 2105 | 2106 | 2107 | CF$UID 2108 | 189 2109 | 2110 | 2111 | NS.objects 2112 | 2113 | 2114 | CF$UID 2115 | 12 2116 | 2117 | 2118 | CF$UID 2119 | 190 2120 | 2121 | 2122 | CF$UID 2123 | 222 2124 | 2125 | 2126 | CF$UID 2127 | 225 2128 | 2129 | 2130 | CF$UID 2131 | 230 2132 | 2133 | 2134 | CF$UID 2135 | 231 2136 | 2137 | 2138 | CF$UID 2139 | 12 2140 | 2141 | 2142 | CF$UID 2143 | 12 2144 | 2145 | 2146 | 2147 | BreakpointsActivated 2148 | DefaultEditorStatesForURLs 2149 | ActiveScheme 2150 | ActiveRunDestination 2151 | DocumentWindows 2152 | RecentEditorDocumentURLs 2153 | AppFocusInMiniDebugging 2154 | DebuggingWindowsLayerMode 2155 | 2156 | $class 2157 | 2158 | CF$UID 2159 | 62 2160 | 2161 | NS.keys 2162 | 2163 | 2164 | CF$UID 2165 | 112 2166 | 2167 | 2168 | CF$UID 2169 | 61 2170 | 2171 | 2172 | NS.objects 2173 | 2174 | 2175 | CF$UID 2176 | 191 2177 | 2178 | 2179 | CF$UID 2180 | 214 2181 | 2182 | 2183 | 2184 | 2185 | $class 2186 | 2187 | CF$UID 2188 | 62 2189 | 2190 | NS.keys 2191 | 2192 | 2193 | CF$UID 2194 | 192 2195 | 2196 | 2197 | NS.objects 2198 | 2199 | 2200 | CF$UID 2201 | 195 2202 | 2203 | 2204 | 2205 | 2206 | $class 2207 | 2208 | CF$UID 2209 | 59 2210 | 2211 | NS.base 2212 | 2213 | CF$UID 2214 | 0 2215 | 2216 | NS.relative 2217 | 2218 | CF$UID 2219 | 193 2220 | 2221 | 2222 | 2223 | $class 2224 | 2225 | CF$UID 2226 | 194 2227 | 2228 | NS.string 2229 | file://localhost/Users/luke/Code/Xcode/Projects/LRToolkit/LRToolkit.xcodeproj/ 2230 | 2231 | 2232 | $classes 2233 | 2234 | NSMutableString 2235 | NSString 2236 | NSObject 2237 | 2238 | $classname 2239 | NSMutableString 2240 | 2241 | 2242 | $class 2243 | 2244 | CF$UID 2245 | 62 2246 | 2247 | NS.keys 2248 | 2249 | 2250 | CF$UID 2251 | 40 2252 | 2253 | 2254 | CF$UID 2255 | 72 2256 | 2257 | 2258 | NS.objects 2259 | 2260 | 2261 | CF$UID 2262 | 196 2263 | 2264 | 2265 | CF$UID 2266 | 208 2267 | 2268 | 2269 | 2270 | 2271 | $class 2272 | 2273 | CF$UID 2274 | 11 2275 | 2276 | NS.objects 2277 | 2278 | 2279 | CF$UID 2280 | 197 2281 | 2282 | 2283 | 2284 | 2285 | $class 2286 | 2287 | CF$UID 2288 | 94 2289 | 2290 | documentURL 2291 | 2292 | CF$UID 2293 | 198 2294 | 2295 | selection 2296 | 2297 | CF$UID 2298 | 200 2299 | 2300 | timestamp 2301 | 2302 | CF$UID 2303 | 199 2304 | 2305 | 2306 | file://localhost/Users/luke/Code/Xcode/Projects/LRToolkit/LRToolkit.xcodeproj/ 2307 | 298745994.72312599 2308 | 2309 | $class 2310 | 2311 | CF$UID 2312 | 62 2313 | 2314 | NS.keys 2315 | 2316 | 2317 | CF$UID 2318 | 78 2319 | 2320 | 2321 | CF$UID 2322 | 79 2323 | 2324 | 2325 | CF$UID 2326 | 201 2327 | 2328 | 2329 | NS.objects 2330 | 2331 | 2332 | CF$UID 2333 | 202 2334 | 2335 | 2336 | CF$UID 2337 | 203 2338 | 2339 | 2340 | CF$UID 2341 | 204 2342 | 2343 | 2344 | 2345 | Xcode3BuildSettingsEditorLocations 2346 | LRToolkit 2347 | Xcode3BuildSettingsEditor 2348 | 2349 | $class 2350 | 2351 | CF$UID 2352 | 11 2353 | 2354 | NS.objects 2355 | 2356 | 2357 | CF$UID 2358 | 205 2359 | 2360 | 2361 | 2362 | 2363 | $class 2364 | 2365 | CF$UID 2366 | 62 2367 | 2368 | NS.keys 2369 | 2370 | 2371 | CF$UID 2372 | 85 2373 | 2374 | 2375 | CF$UID 2376 | 86 2377 | 2378 | 2379 | CF$UID 2380 | 87 2381 | 2382 | 2383 | CF$UID 2384 | 88 2385 | 2386 | 2387 | CF$UID 2388 | 89 2389 | 2390 | 2391 | CF$UID 2392 | 90 2393 | 2394 | 2395 | NS.objects 2396 | 2397 | 2398 | CF$UID 2399 | 206 2400 | 2401 | 2402 | CF$UID 2403 | 207 2404 | 2405 | 2406 | CF$UID 2407 | 12 2408 | 2409 | 2410 | CF$UID 2411 | 12 2412 | 2413 | 2414 | CF$UID 2415 | 93 2416 | 2417 | 2418 | CF$UID 2419 | 93 2420 | 2421 | 2422 | 2423 | 2424 | $class 2425 | 2426 | CF$UID 2427 | 63 2428 | 2429 | NS.objects 2430 | 2431 | 2432 | 2433 | $class 2434 | 2435 | CF$UID 2436 | 63 2437 | 2438 | NS.objects 2439 | 2440 | 2441 | 2442 | $class 2443 | 2444 | CF$UID 2445 | 62 2446 | 2447 | NS.keys 2448 | 2449 | 2450 | CF$UID 2451 | 96 2452 | 2453 | 2454 | NS.objects 2455 | 2456 | 2457 | CF$UID 2458 | 209 2459 | 2460 | 2461 | 2462 | 2463 | $class 2464 | 2465 | CF$UID 2466 | 63 2467 | 2468 | NS.objects 2469 | 2470 | 2471 | CF$UID 2472 | 210 2473 | 2474 | 2475 | CF$UID 2476 | 212 2477 | 2478 | 2479 | 2480 | 2481 | $class 2482 | 2483 | CF$UID 2484 | 48 2485 | 2486 | NS.keys 2487 | 2488 | 2489 | CF$UID 2490 | 99 2491 | 2492 | 2493 | CF$UID 2494 | 100 2495 | 2496 | 2497 | NS.objects 2498 | 2499 | 2500 | CF$UID 2501 | 101 2502 | 2503 | 2504 | CF$UID 2505 | 211 2506 | 2507 | 2508 | 2509 | 162 2510 | 2511 | $class 2512 | 2513 | CF$UID 2514 | 48 2515 | 2516 | NS.keys 2517 | 2518 | 2519 | CF$UID 2520 | 99 2521 | 2522 | 2523 | CF$UID 2524 | 100 2525 | 2526 | 2527 | NS.objects 2528 | 2529 | 2530 | CF$UID 2531 | 101 2532 | 2533 | 2534 | CF$UID 2535 | 213 2536 | 2537 | 2538 | 2539 | 1238 2540 | 2541 | $class 2542 | 2543 | CF$UID 2544 | 62 2545 | 2546 | NS.keys 2547 | 2548 | 2549 | CF$UID 2550 | 215 2551 | 2552 | 2553 | NS.objects 2554 | 2555 | 2556 | CF$UID 2557 | 217 2558 | 2559 | 2560 | 2561 | 2562 | $class 2563 | 2564 | CF$UID 2565 | 59 2566 | 2567 | NS.base 2568 | 2569 | CF$UID 2570 | 0 2571 | 2572 | NS.relative 2573 | 2574 | CF$UID 2575 | 216 2576 | 2577 | 2578 | 2579 | $class 2580 | 2581 | CF$UID 2582 | 194 2583 | 2584 | NS.string 2585 | file://localhost/Users/luke/Code/Xcode/Projects/LRToolkit/Unit%20Tests/MyExampleClass.m 2586 | 2587 | 2588 | $class 2589 | 2590 | CF$UID 2591 | 62 2592 | 2593 | NS.keys 2594 | 2595 | 2596 | CF$UID 2597 | 40 2598 | 2599 | 2600 | CF$UID 2601 | 41 2602 | 2603 | 2604 | NS.objects 2605 | 2606 | 2607 | CF$UID 2608 | 218 2609 | 2610 | 2611 | CF$UID 2612 | 221 2613 | 2614 | 2615 | 2616 | 2617 | $class 2618 | 2619 | CF$UID 2620 | 11 2621 | 2622 | NS.objects 2623 | 2624 | 2625 | CF$UID 2626 | 219 2627 | 2628 | 2629 | 2630 | 2631 | $class 2632 | 2633 | CF$UID 2634 | 46 2635 | 2636 | characterRangeLen 2637 | 0 2638 | characterRangeLoc 2639 | 314 2640 | documentURL 2641 | 2642 | CF$UID 2643 | 44 2644 | 2645 | endingColumnNumber 2646 | -1 2647 | endingLineNumber 2648 | -1 2649 | startingColumnNumber 2650 | -1 2651 | startingLineNumber 2652 | -1 2653 | timestamp 2654 | 2655 | CF$UID 2656 | 220 2657 | 2658 | 2659 | 298746222.52884501 2660 | {0, 344} 2661 | 2662 | $class 2663 | 2664 | CF$UID 2665 | 62 2666 | 2667 | NS.keys 2668 | 2669 | 2670 | CF$UID 2671 | 223 2672 | 2673 | 2674 | NS.objects 2675 | 2676 | 2677 | CF$UID 2678 | 224 2679 | 2680 | 2681 | 2682 | IDENameString 2683 | LRToolkit 2684 | 2685 | $class 2686 | 2687 | CF$UID 2688 | 62 2689 | 2690 | NS.keys 2691 | 2692 | 2693 | CF$UID 2694 | 226 2695 | 2696 | 2697 | CF$UID 2698 | 227 2699 | 2700 | 2701 | NS.objects 2702 | 2703 | 2704 | CF$UID 2705 | 228 2706 | 2707 | 2708 | CF$UID 2709 | 229 2710 | 2711 | 2712 | 2713 | IDEDeviceLocation 2714 | IDEDeviceArchitecture 2715 | dvtdevice-local-computer:localhost 2716 | i386 2717 | 2718 | $class 2719 | 2720 | CF$UID 2721 | 63 2722 | 2723 | NS.objects 2724 | 2725 | 2726 | 2727 | $class 2728 | 2729 | CF$UID 2730 | 63 2731 | 2732 | NS.objects 2733 | 2734 | 2735 | CF$UID 2736 | 232 2737 | 2738 | 2739 | CF$UID 2740 | 233 2741 | 2742 | 2743 | CF$UID 2744 | 235 2745 | 2746 | 2747 | 2748 | 2749 | $class 2750 | 2751 | CF$UID 2752 | 59 2753 | 2754 | NS.base 2755 | 2756 | CF$UID 2757 | 0 2758 | 2759 | NS.relative 2760 | 2761 | CF$UID 2762 | 75 2763 | 2764 | 2765 | 2766 | $class 2767 | 2768 | CF$UID 2769 | 59 2770 | 2771 | NS.base 2772 | 2773 | CF$UID 2774 | 0 2775 | 2776 | NS.relative 2777 | 2778 | CF$UID 2779 | 234 2780 | 2781 | 2782 | file://localhost/Users/luke/Code/Xcode/Projects/LRToolkit/Unit%20Tests/MyExampleClass.h 2783 | 2784 | $class 2785 | 2786 | CF$UID 2787 | 59 2788 | 2789 | NS.base 2790 | 2791 | CF$UID 2792 | 0 2793 | 2794 | NS.relative 2795 | 2796 | CF$UID 2797 | 44 2798 | 2799 | 2800 | 2801 | $top 2802 | 2803 | State 2804 | 2805 | CF$UID 2806 | 1 2807 | 2808 | 2809 | $version 2810 | 100000 2811 | 2812 | 2813 | -------------------------------------------------------------------------------- /LRToolkit.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/LRToolkit.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /LRToolkit.xcodeproj/xcuserdata/luke.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | LRToolkit.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | libLRToolkit.a 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /LRToolkit_Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'CocoaTouchStaticLibrary' target in the 'CocoaTouchStaticLibrary' project. 3 | // 4 | 5 | #ifdef __OBJC__ 6 | #import 7 | #endif 8 | -------------------------------------------------------------------------------- /README.markdown: -------------------------------------------------------------------------------- 1 | # LRToolkit 2 | 3 | LRToolkit is a collection of categories and useful classes that I use across my various iPhone and iPad projects; stuff thats too small to have a repository of its own or has previously only been available in Gist form. 4 | 5 | All code is available under the MIT license unless otherwise specified; where code has come from an external source, I have tried to credit the original author and if the license for the code differs, it will be included in the head of the source. 6 | 7 | An overview of some of the key classes will follow. 8 | 9 | --------------------------------------------------------------------------------