├── .gitignore
├── .idea
├── TumblrKit.iml
├── encodings.xml
├── inspectionProfiles
│ ├── Project_Default.xml
│ └── profiles_settings.xml
├── misc.xml
├── modules.xml
├── scopes
│ └── scope_settings.xml
├── vcs.xml
└── xcode.xml
├── English.lproj
└── InfoPlist.strings
├── Info.plist
├── MIT-LICENSE.txt
├── NSDictionary+TumblrKit.h
├── NSDictionary+TumblrKit.m
├── NSString+TumblrKit.h
├── NSString+TumblrKit.m
├── README.md
├── TKPost.h
├── TKPost.m
├── TKPostsRequest.h
├── TKPostsRequest.m
├── TKPostsResponse.h
├── TKPostsResponse.m
├── TKRequest.h
├── TKRequest.m
├── TKTumblelog.h
├── TKTumblelog.m
├── TKTumblelogsRequest.h
├── TKTumblelogsRequest.m
├── TKTumblelogsResponse.h
├── TKTumblelogsResponse.m
├── TKTumblr.h
├── TKTumblr.m
├── TKTumblrReadRequest.h
├── TKTumblrReadRequest.m
├── TumblrKit Tests for Mac
├── TumblrKit Tests for Mac-Info.plist
├── TumblrKit Tests for Mac-Prefix.pch
├── TumblrKit_Tests_for_Mac.h
├── TumblrKit_Tests_for_Mac.m
└── en.lproj
│ └── InfoPlist.strings
├── TumblrKit Tests for iOS
├── TKTumblelogsRequestTests.h
├── TKTumblelogsRequestTests.m
├── TumblrKit Tests for iOS-Info.plist
├── TumblrKit Tests for iOS-Prefix.pch
├── TumblrKit_Tests_for_iOS.h
├── TumblrKit_Tests_for_iOS.m
└── en.lproj
│ └── InfoPlist.strings
├── TumblrKit for Mac
├── TumblrKit for Mac-Info.plist
├── TumblrKit for Mac-Prefix.pch
├── TumblrKit_for_Mac.h
├── TumblrKit_for_Mac.m
└── en.lproj
│ └── InfoPlist.strings
├── TumblrKit for iOS
├── TumblrKit for iOS-Prefix.pch
├── TumblrKit_for_iOS.h
└── TumblrKit_for_iOS.m
├── TumblrKit.xcodeproj
├── igorsutton.mode2v3
└── project.pbxproj
└── doxygen.config
/.gitignore:
--------------------------------------------------------------------------------
1 | # XCode noise
2 | build/
3 | *.mode1v3
4 | *.pbxuser
5 | *.perspectivev3
6 | *.xcodeproj/project.xcworkspace/*
7 | *.xcodeproj/xcuserdata/*
8 |
9 | # OSX noise
10 | .DS_Store
11 | profile
12 |
13 | # Doxygen
14 | *.docset/
15 | html/
16 | latex/
17 |
18 | # shared objects
19 | *.dylib
20 |
--------------------------------------------------------------------------------
/.idea/TumblrKit.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/Project_Default.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | http://www.w3.org/1999/xhtml
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/scopes/scope_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/xcode.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/English.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /* Localized versions of Info.plist keys */
2 |
3 |
--------------------------------------------------------------------------------
/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | English
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | com.github.isutton.${PRODUCT_NAME:rfc1034Identifier}
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | ${PRODUCT_NAME}
17 | CFBundlePackageType
18 | FMWK
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | 1
25 | NSPrincipalClass
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/MIT-LICENSE.txt:
--------------------------------------------------------------------------------
1 |
2 | Copyright (c) 2010, 2011 TumblrKit
3 |
4 | Permission is hereby granted, free of charge, to any person obtaining a copy
5 | of this software and associated documentation files (the "Software"), to deal
6 | in the Software without restriction, including without limitation the rights
7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | copies of the Software, and to permit persons to whom the Software is
9 | furnished to do so, subject to the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be included in
12 | all copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | THE SOFTWARE.
21 |
22 |
--------------------------------------------------------------------------------
/NSDictionary+TumblrKit.h:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2010, 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | /**
24 | TumblrKit's additions to NSDictionary.
25 | */
26 | @interface NSDictionary (TumblrKit)
27 |
28 | - (NSData *)multipartMIMEData;
29 |
30 | @end
31 |
--------------------------------------------------------------------------------
/NSDictionary+TumblrKit.m:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2010, 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | #import "NSDictionary+TumblrKit.h"
24 | #import "NSString+TumblrKit.h"
25 |
26 | @implementation NSDictionary (TumblrKit)
27 |
28 | - (NSData *)multipartMIMEData
29 | {
30 | NSString *format = @"--%@\r\nContent-Disposition: form-data; name=\"%@\"\r\n\r\n%@\r\n";
31 | NSMutableData *result = [NSMutableData data];
32 | NSMutableDictionary *dict_ = [self mutableCopy];
33 |
34 | // Hack: it seems the order we send the data in the HTTP post body matter
35 | // in the Tumblr API. We'll remove the "type" object from the dictionary
36 | // we copied and append its value as first thing, then we'll iterate the
37 | // remaining keys. The impressive part is it worked directly when TumblrKit
38 | // was compiled in 32 bit mode (where "type" was the first item to be encoded)
39 | // but didn't work in 64 bit mode. It seems the architecture affects the
40 | // sort of the keys, but we should not rely on that anyway (nor should the
41 | // Tumblr API engineers :-)
42 |
43 | id value = [dict_ objectForKey:@"type"];
44 | [dict_ removeObjectForKey:@"type"];
45 | [result appendData:[[NSString stringWithFormat:format, [NSString MIMEBoundary], @"type", value] dataUsingEncoding:NSUTF8StringEncoding]];
46 |
47 | for (NSString *key in dict_) {
48 | if ([key isEqualToString:@"data"]) {
49 | [result appendData:[[NSString stringWithFormat:@"--%@\r\nContent-Disposition: form-data; name=\"%@\"\r\n\r\n", [NSString MIMEBoundary], key] dataUsingEncoding:NSUTF8StringEncoding]];
50 | [result appendData:[dict_ objectForKey:key]];
51 | [result appendData:[@"\n" dataUsingEncoding:NSUTF8StringEncoding]];
52 | }
53 | else {
54 | [result appendData:[[NSString stringWithFormat:format, [NSString MIMEBoundary], key, [dict_ objectForKey:key]] dataUsingEncoding:NSUTF8StringEncoding]];
55 | }
56 | }
57 |
58 | [result appendData:[[NSString stringWithFormat:@"--%@--\r\n", [NSString MIMEBoundary]] dataUsingEncoding:NSUTF8StringEncoding]];
59 |
60 | return result;
61 | }
62 |
63 | @end
64 |
--------------------------------------------------------------------------------
/NSString+TumblrKit.h:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2010, 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | #import
24 |
25 | @interface NSString (TumblrKit)
26 |
27 | - (NSString *)stringByAddingQueryPercentEscapesUsingEncoding:(NSStringEncoding)encoding;
28 | + (NSString *)MIMEBoundary;
29 |
30 | @end
31 |
--------------------------------------------------------------------------------
/NSString+TumblrKit.m:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2010, 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | #import "NSString+TumblrKit.h"
24 |
25 | @implementation NSString (TumblrKit)
26 |
27 | - (NSString *)stringByAddingQueryPercentEscapesUsingEncoding:(NSStringEncoding)encoding
28 | {
29 | NSString *result = (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(
30 | NULL,
31 | (__bridge_retained CFStringRef)[self mutableCopy],
32 | NULL,
33 | CFSTR("=,!$&'()*+;@?\n\"<>#\t :/"),
34 | kCFStringEncodingUTF8);
35 | return result;
36 | }
37 |
38 | + (NSString *)MIMEBoundary
39 | {
40 | static NSString *MIMEBoundary = nil;
41 |
42 | if (!MIMEBoundary) {
43 | MIMEBoundary = [[NSString alloc] initWithFormat:
44 | @"----_=_MIMEBoundary_%@_=_----",
45 | [[NSProcessInfo processInfo] globallyUniqueString]];
46 | }
47 |
48 | return MIMEBoundary;
49 | }
50 |
51 | @end
52 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | TumblrKit
2 | =========
3 |
4 | TumblrKit is a light-weight wrapper around Tumblr's API in Objective-C.
5 |
6 | Currently you can:
7 |
8 | * Fetch posts from Tumblr (regular, conversation, quote and link)
9 | * Upload posts to Tumblr (regular, conversation, quote, link and photo)
10 |
11 | Usage
12 | -----
13 |
14 | You can fetch a post with a specific POST_ID using the following:
15 |
16 | TKTumblr *tumblr = [[TKTumblr alloc] initWithEmail:EMAIL andPassword:PASSWORD];
17 | TKPost *thePost = [tumblr postWithID:[NSNumber numberWithInt:POST_ID] andDomain:@"example.tumblr.com"];
18 | NSLog(@"thePost: %@", thePost);
19 |
20 | If you want to fetch more than one post:
21 |
22 | // Instantiate a new TKTumblr object.
23 | TKTumblr *tumblr = [[TKTumblr alloc] initWithEmail:EMAIL andPassword:PASSWORD];
24 |
25 | // Configure a delegate implementing the TKTumblrDelegate protocol.
26 | tumblr.delegate = aDelegate;
27 |
28 | // Configure the read request object.
29 | TKTumblrReadRequest *theReadRequest = [[TKTumblrReadRequest alloc] init];
30 |
31 | // Return the post in raw text (if you wrote using Markdown).
32 | theReadRequest.filter = TKPostFilterNone;
33 |
34 | // Execute the read request. For each post, TKTumblr will send the
35 | // tumblrDidReceivePost:withDomain: message to the delegate object.
36 | [tumblr postsWithReadRequest:theReadRequest];
37 |
38 | To upload a TKPost:
39 |
40 | // Create a new TKPost
41 | TKPostRegular *thePost = [[TKPostRegular alloc] init];
42 | thePost.title = @"The title";
43 | thePost.body = @"The body";
44 |
45 | // Upload it to Tumblr. The delegate will receive either
46 | // tumblrDidUploadPost:withDomain:postId: or
47 | // tumblrDidFailToUploadPost:withDomain:returnCode:
48 | [tumblr uploadPost:thePost withDomain:@"another-example.tumblr.com"];
49 |
50 | // If you're lazy, you can dismiss the withDomain to upload to your main
51 | // Tumblelog.
52 | [tumblr uploadPost:thePost];
53 |
54 | To Do
55 | -----
56 |
57 | * Currently network connections are synchronous. Need to add support for asynchronous connections, and respective delegate methods.
58 |
--------------------------------------------------------------------------------
/TKPost.h:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2010, 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | #if TARGET_OS_IPHONE
24 | typedef UIImage TKImage;
25 | #elif TARGET_OS_MAC
26 | typedef NSImage TKImage;
27 | #endif
28 |
29 | typedef enum
30 | {
31 | TKPostStateAll,
32 | TKPostStateDraft,
33 | TKPostStateQueue,
34 | TKPostStateSubmission
35 | } TKPostState;
36 |
37 | typedef enum
38 | {
39 | TKPostTypeAll,
40 | TKPostTypeRegular,
41 | TKPostTypeLink,
42 | TKPostTypeQuote,
43 | TKPostTypePhoto,
44 | TKPostTypeConversation,
45 | TKPostTypeVideo,
46 | TKPostTypeAudio,
47 | TKPostTypeAnswer
48 | } TKPostType;
49 |
50 | typedef enum
51 | {
52 | TKPostFormatHTML,
53 | TKPostFormatMarkdown
54 | } TKPostFormat;
55 |
56 | typedef enum
57 | {
58 | TKPostFilterHTML,
59 | TKPostFilterText,
60 | TKPostFilterNone
61 | } TKPostFilter;
62 |
63 | /**
64 | Base class for all TumblrKit post representation.
65 | */
66 | @interface TKPost : NSObject
67 | {
68 | /** This post's ID. */
69 | NSNumber *postID;
70 |
71 | /** This post's URL. */
72 | NSString *url;
73 |
74 | /** This post's slug. */
75 | NSString *slug;
76 |
77 | /** This post's publish date. */
78 | NSDate *date;
79 |
80 | /** This post's reblog key. */
81 | NSString *reblogKey;
82 |
83 | /** This post's type. */
84 | TKPostType type;
85 |
86 | /** This post's format. */
87 | TKPostFormat format;
88 |
89 | /** This post's group (or domain). */
90 | NSString *group;
91 | }
92 |
93 | @property (nonatomic,copy) NSNumber *postID;
94 | @property (nonatomic,copy) NSString *url;
95 | @property (nonatomic,copy) NSString *slug;
96 | @property (nonatomic,copy) NSDate *date;
97 | @property (nonatomic,copy) NSString *reblogKey;
98 | @property (nonatomic,assign) TKPostType type;
99 | @property (nonatomic,assign) TKPostFormat format;
100 | @property (nonatomic,copy) NSString *group;
101 |
102 | /**
103 | Creates a new TKPost subclass based on the attributeDict parameter.
104 | */
105 | + (id)postWithAttributes:(NSDictionary *)attributeDict;
106 |
107 | /**
108 | Initializes the base TKPost object with attributeDict contents.
109 | */
110 | - (id)initWithAttributes:(NSDictionary *)attributeDict;
111 |
112 | /**
113 | Returns this post's type as string.
114 | */
115 | - (NSString *)typeAsString;
116 |
117 | /**
118 | Returns a dictionary containing all the attributes of the current post.
119 | */
120 | - (NSDictionary *)attributesAsDictionary;
121 |
122 | @end
123 |
124 | /**
125 | Represents Tumblr's "regular" kind of post.
126 | */
127 | @interface TKPostRegular : TKPost
128 | {
129 | /** This post's title. */
130 | NSMutableString *title;
131 |
132 | /** This post's body. */
133 | NSMutableString *body;
134 | }
135 |
136 | /**
137 | Returns a copy of this post's title.
138 | */
139 | - (NSString *)title;
140 |
141 | /**
142 | Sets this post's title.
143 | */
144 | - (void)setTitle:(NSString *)aTitle;
145 |
146 | /**
147 | Returns a copy of this post's body.
148 | */
149 | - (NSString *)body;
150 |
151 | /**
152 | Sets this post's body.
153 | */
154 | - (void)setBody:(NSString *)aBody;
155 |
156 | /**
157 | Appends the given string to this post's title.
158 | */
159 | - (void)appendToTitle:(NSString *)string;
160 |
161 | /**
162 | Appends the given string to this post's body.
163 | */
164 | - (void)appendToBody:(NSString *)string;
165 |
166 | @end
167 |
168 | @interface TKPostLink : TKPost
169 | {
170 | NSMutableString *text;
171 | NSURL *URL;
172 | }
173 |
174 | @property (nonatomic,copy) NSURL *URL;
175 |
176 | - (NSString *)text;
177 | - (void)setText:(NSString *)aText;
178 | - (void)appendToText:(NSString *)string;
179 | - (void)setURLWithString:(NSString *)URLString;
180 |
181 | @end
182 |
183 | @interface TKPostQuote : TKPost
184 | {
185 | NSMutableString *text;
186 | NSMutableString *source;
187 | }
188 |
189 | - (NSString *)text;
190 | - (void)setText:(NSString *)aText;
191 | - (NSString *)source;
192 | - (void)setSource:(NSString *)aSource;
193 | - (void)appendToText:(NSString *)string;
194 | - (void)appendToSource:(NSString *)string;
195 |
196 | @end
197 |
198 | @interface TKPostPhoto : TKPost
199 | {
200 | NSMutableString *caption;
201 | NSString *source;
202 | TKImage *image;
203 | NSInteger width;
204 | NSInteger height;
205 | }
206 |
207 | @property (assign) NSInteger width;
208 | @property (assign) NSInteger height;
209 | @property (copy) NSString *source;
210 | @property (strong) TKImage *image;
211 |
212 | - (NSString *)caption;
213 | - (void)setCaption:(NSString *)aCaption;
214 | - (void)appendToCaption:(NSString *)string;
215 |
216 | @end
217 |
218 | @interface TKPostConversation : TKPost
219 | {
220 | NSMutableString *text;
221 | }
222 |
223 | - (NSString *)text;
224 | - (void)setText:(NSString *)aText;
225 | - (void)appendToText:(NSString *)string;
226 |
227 | @end
228 |
229 | @interface TKPostVideo : TKPost
230 | {
231 | NSMutableString *caption;
232 | NSMutableString *source;
233 | NSMutableString *player;
234 | }
235 |
236 | - (NSString *)caption;
237 | - (void)setCaption:(NSString *)aCaption;
238 | - (NSString *)source;
239 | - (void)setSource:(NSString *)aSource;
240 | - (NSString *)player;
241 | - (void)setPlayer:(NSString *)aPlayer;
242 | - (void)appendToCaption:(NSString *)string;
243 | - (void)appendToSource:(NSString *)string;
244 | - (void)appendToPlayer:(NSString *)string;
245 |
246 | @end
247 |
248 | @interface TKPostAudio : TKPost
249 | {
250 | NSMutableString *caption;
251 | NSMutableString *player;
252 | }
253 |
254 | - (NSString *)caption;
255 | - (void)setCaption:(NSString *)aCaption;
256 | - (NSString *)player;
257 | - (void)setPlayer:(NSString *)aPlayer;
258 | - (void)appendToCaption:(NSString *)string;
259 | - (void)appendToPlayer:(NSString *)string;
260 |
261 | @end
262 |
--------------------------------------------------------------------------------
/TKPost.m:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2010, 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | #import "TKPost.h"
24 |
25 | static NSString *TKPostTypeFromTumblrAsString[] =
26 | {
27 | @"",
28 | @"regular",
29 | @"link",
30 | @"quote",
31 | @"photo",
32 | @"conversation",
33 | @"video",
34 | @"audio",
35 | @"answer"
36 | };
37 |
38 | static NSString *TKPostTypeAsString[] =
39 | {
40 | @"",
41 | @"TKPostTypeRegular",
42 | @"TKPostTypeLink",
43 | @"TKPostTypeQuote",
44 | @"TKPostTypePhoto",
45 | @"TKPostTypeConversation",
46 | @"TKPostTypeVideo",
47 | @"TKPostTypeAudio",
48 | @"TKPostTypeAnswer"
49 | };
50 |
51 | static NSString *TKPostFormatAsString[] =
52 | {
53 | @"TKPostFormatHTML",
54 | @"TKPostFormatMarkdown"
55 | };
56 |
57 | @implementation TKPost
58 |
59 | @synthesize postID, url, slug, date, reblogKey, type, format, group;
60 |
61 | - (id)init
62 | {
63 | if ((self = [super init]) != nil) {
64 | postID = nil;
65 | url = nil;
66 | reblogKey = nil;
67 | date = nil;
68 | url = nil;
69 | group = nil;
70 | format = TKPostFormatHTML;
71 | }
72 |
73 | return self;
74 | }
75 |
76 | - (id)initWithAttributes:(NSDictionary *)attributeDict
77 | {
78 | if ((self = [self init]) != nil) {
79 | self.postID = [attributeDict objectForKey:@"id"];
80 | self.url = [attributeDict objectForKey:@"url"];
81 | self.date = [attributeDict objectForKey:@"date"];
82 | self.slug = [attributeDict objectForKey:@"slug"];
83 | self.reblogKey = [attributeDict objectForKey:@"reblog-key"];
84 | self.format = [[attributeDict objectForKey:@"format"] isEqualToString:@"html"]
85 | ? TKPostFormatHTML
86 | : TKPostFormatMarkdown;
87 | }
88 |
89 | return self;
90 | }
91 |
92 |
93 | - (NSString *)description
94 | {
95 | return [NSString stringWithFormat:@"Post ID: %@, Date: %@, URL: %@, Slug: %@, Type: %@, Reblog Key: %@, Format: %@", self.postID, self.date, self.url, self.slug, TKPostTypeAsString[self.type], self.reblogKey, TKPostFormatAsString[self.format]];
96 | }
97 |
98 | + (id)postWithAttributes:(NSDictionary *)attributeDict
99 | {
100 | /**
101 | Simplistic dictionary to be used statically. Used to map a Tumblr's post type
102 | to internal TumblrKit class names.
103 | */
104 | static NSDictionary *TKPostTypeToClassNameDict;
105 | if (!TKPostTypeToClassNameDict) {
106 | TKPostTypeToClassNameDict = [NSDictionary dictionaryWithObjectsAndKeys:
107 | @"TKPostPhoto", @"photo",
108 | @"TKPostConversation", @"conversation",
109 | @"TKPostLink", @"link",
110 | @"TKPostQuote", @"quote",
111 | @"TKPostRegular", @"regular",
112 | @"TKPostVideo", @"video",
113 | @"TKPostAudio", @"audio",
114 | nil];
115 | }
116 |
117 | Class postClass;
118 | NSString *type_ = [attributeDict objectForKey:@"type"];
119 |
120 | postClass = NSClassFromString([TKPostTypeToClassNameDict objectForKey:type_]);
121 |
122 | return [(TKPost *) [postClass alloc] initWithAttributes:attributeDict];
123 | }
124 |
125 | - (NSString *)typeAsString
126 | {
127 | return TKPostTypeFromTumblrAsString[self.type];
128 | }
129 |
130 | - (NSDictionary *)attributesAsDictionary
131 | {
132 | NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:
133 | [self typeAsString], @"type",
134 | [self group], @"group",
135 | nil];
136 | return dict;
137 | }
138 |
139 | @end
140 |
141 | @implementation TKPostRegular
142 |
143 | - (id)init
144 | {
145 | if ((self = [super init]) != nil) {
146 | self.title = @"";
147 | self.body = @"";
148 | self.type = TKPostTypeRegular;
149 | }
150 |
151 | return self;
152 | }
153 |
154 |
155 | - (NSString *)title
156 | {
157 | return [title copy];
158 | }
159 |
160 | - (void)setTitle:(NSString *)aTitle
161 | {
162 | if (aTitle != title) {
163 | title = [aTitle mutableCopy];
164 | }
165 | }
166 |
167 | - (NSString *)body
168 | {
169 | return [body copy];
170 | }
171 |
172 | - (void)setBody:(NSString *)aBody
173 | {
174 | if (aBody != body) {
175 | body = [aBody mutableCopy];
176 | }
177 | }
178 |
179 | - (void)appendToBody:(NSString *)string
180 | {
181 | [body appendString:string];
182 | }
183 |
184 | - (void)appendToTitle:(NSString *)string
185 | {
186 | [title appendString:string];
187 | }
188 |
189 | - (NSString *)description
190 | {
191 | return [NSString stringWithFormat:@"%@, Title: %@, Body: %@", [super description], self.title, self.body];
192 | }
193 |
194 | - (NSDictionary *)attributesAsDictionary
195 | {
196 | NSMutableDictionary *dict = (NSMutableDictionary *) [super attributesAsDictionary];
197 | [dict setObject:body forKey:@"body"];
198 | [dict setObject:title forKey:@"title"];
199 | return dict;
200 | }
201 |
202 | @end
203 |
204 | @implementation TKPostLink
205 |
206 | @synthesize URL;
207 |
208 | - (id)init
209 | {
210 | if ((self = [super init]) != nil) {
211 | URL = nil;
212 | type = TKPostTypeLink;
213 | text = [[NSMutableString alloc] init];
214 | }
215 |
216 | return self;
217 | }
218 |
219 |
220 | - (NSString *)text
221 | {
222 | return [text copy];
223 | }
224 |
225 | - (void)setText:(NSString *)aText
226 | {
227 | if (aText != text) {
228 | text = [aText mutableCopy];
229 | }
230 | }
231 |
232 | - (void)appendToText:(NSString *)string
233 | {
234 | [text appendString:string];
235 | }
236 |
237 | - (void)setURLWithString:(NSString *)URLString
238 | {
239 | self.URL = [NSURL URLWithString:URLString];
240 | }
241 |
242 | - (NSString *)description
243 | {
244 | return [NSString stringWithFormat:@"%@, Link Text: %@, Link URL: %@", [super description], self.text, self.URL];
245 | }
246 |
247 | - (NSDictionary *)attributesAsDictionary
248 | {
249 | NSMutableDictionary *dict = (NSMutableDictionary *) [super attributesAsDictionary];
250 | [dict setObject:text forKey:@"name"];
251 | [dict setObject:[URL absoluteString] forKey:@"url"];
252 | return dict;
253 | }
254 |
255 | @end
256 |
257 | @implementation TKPostQuote
258 |
259 | - (id)init
260 | {
261 | if ((self = [super init]) != nil) {
262 | type = TKPostTypeQuote;
263 | source = [[NSMutableString alloc] init];
264 | text = [[NSMutableString alloc] init];
265 | }
266 |
267 | return self;
268 | }
269 |
270 |
271 | - (NSString *)text
272 | {
273 | return [text copy];
274 | }
275 |
276 | - (void)setText:(NSString *)aText
277 | {
278 | if (aText != text) {
279 | text = [aText mutableCopy];
280 | }
281 | }
282 |
283 | - (NSString *)source
284 | {
285 | return [source copy];
286 | }
287 |
288 | - (void)setSource:(NSString *)aSource
289 | {
290 | if (aSource != source) {
291 | source = [aSource mutableCopy];
292 | }
293 | }
294 |
295 | - (void)appendToText:(NSString *)string
296 | {
297 | [text appendString:string];
298 | }
299 |
300 | - (void)appendToSource:(NSString *)string
301 | {
302 | [source appendString:string];
303 | }
304 |
305 | - (NSString *)description
306 | {
307 | return [NSString stringWithFormat:@"%@, Quote Text: %@, Quote Source: %@", [super description], self.text, self.source];
308 | }
309 |
310 | - (NSDictionary *)attributesAsDictionary
311 | {
312 | NSMutableDictionary *dict = (NSMutableDictionary *) [super attributesAsDictionary];
313 | [dict setObject:text forKey:@"quote"];
314 | [dict setObject:source forKey:@"whatever"];
315 | return dict;
316 | }
317 |
318 | @end
319 |
320 | @implementation TKPostConversation
321 |
322 | - (id)init
323 | {
324 | if ((self = [super init]) != nil) {
325 | type = TKPostTypeConversation;
326 | text = [[NSMutableString alloc] init];
327 | }
328 |
329 | return self;
330 | }
331 |
332 |
333 | - (NSString *)text
334 | {
335 | return [text copy];
336 | }
337 |
338 | - (void)setText:(NSString *)aText
339 | {
340 | if (aText != text) {
341 | text = [aText mutableCopy];
342 | }
343 | }
344 |
345 | - (void)appendToText:(NSString *)string
346 | {
347 | [text appendString:string];
348 | }
349 |
350 | - (NSString *)description
351 | {
352 | return [NSString stringWithFormat:@"%@, Conversation Text: %@", [super description], self.text];
353 | }
354 |
355 | - (NSDictionary *)attributesAsDictionary
356 | {
357 | NSMutableDictionary *dict = (NSMutableDictionary *) [super attributesAsDictionary];
358 | [dict setObject:text forKey:@"conversation"];
359 | [dict setObject:@"" forKey:@"title"];
360 | return dict;
361 | }
362 |
363 | @end
364 |
365 | @implementation TKPostPhoto
366 |
367 | @synthesize width, height, source, image;
368 |
369 | - (id)init
370 | {
371 | if ((self = [super init]) != nil) {
372 | type = TKPostTypePhoto;
373 | caption = [[NSMutableString alloc] init];
374 | image = nil;
375 | source = nil;
376 | width = 0;
377 | height = 0;
378 | }
379 |
380 | return self;
381 | }
382 |
383 | - (id)initWithAttributes:(NSDictionary *)attributeDict
384 | {
385 | if ((self = [super initWithAttributes:attributeDict]) != nil) {
386 | width = [[attributeDict objectForKey:@"width"] integerValue];
387 | height = [[attributeDict objectForKey:@"height"] integerValue];
388 | }
389 |
390 | return self;
391 | }
392 |
393 |
394 | - (NSString *)caption
395 | {
396 | return [caption copy];
397 | }
398 |
399 | - (void)setCaption:(NSString *)aCaption
400 | {
401 | if (aCaption != caption) {
402 | caption = [aCaption mutableCopy];
403 | }
404 | }
405 |
406 | - (void)appendToCaption:(NSString *)string
407 | {
408 | [caption appendString:string];
409 | }
410 |
411 | - (NSString *)description
412 | {
413 | return [NSString stringWithFormat:@"%@, Photo Caption: %@, Photo Width: %i, Photo Height: %i", [super description], self.caption, self.width, self.height];
414 | }
415 |
416 | - (NSDictionary *)attributesAsDictionary
417 | {
418 | NSMutableDictionary *dict = (NSMutableDictionary *) [super attributesAsDictionary];
419 | if (source != nil)
420 | [dict setObject:source forKey:@"source"];
421 | if (image != nil && source == nil) {
422 | #if TARGET_OS_IPHONE
423 | [dict setObject:UIImageJPEGRepresentation(image, 1.0) forKey:@"data"];
424 | #elif TARGET_OS_MAC
425 | NSBitmapImageRep *bitmap = [[image representations] objectAtIndex:0];
426 | [dict setObject:[bitmap representationUsingType:NSJPEGFileType properties:nil] forKey:@"data"];
427 | #endif
428 | }
429 | [dict setObject:caption forKey:@"caption"];
430 |
431 | return dict;
432 | }
433 |
434 | @end
435 |
436 | @implementation TKPostVideo
437 |
438 | - (id)init
439 | {
440 | if ((self = [super init]) != nil) {
441 | type = TKPostTypeVideo;
442 | caption = [[NSMutableString alloc] init];
443 | source = [[NSMutableString alloc] init];
444 | player = [[NSMutableString alloc] init];
445 | }
446 |
447 | return self;
448 | }
449 |
450 |
451 | - (NSString *)caption
452 | {
453 | return [caption copy];
454 | }
455 |
456 | - (void)setCaption:(NSString *)aCaption
457 | {
458 | if (aCaption != caption) {
459 | caption = [aCaption mutableCopy];
460 | }
461 | }
462 |
463 | - (NSString *)source
464 | {
465 | return [source copy];
466 | }
467 |
468 | - (void)setSource:(NSString *)aSource
469 | {
470 | if (aSource != source) {
471 | source = [aSource mutableCopy];
472 | }
473 | }
474 |
475 | - (NSString *)player
476 | {
477 | return [player copy];
478 | }
479 |
480 | - (void)setPlayer:(NSString *)aPlayer
481 | {
482 | if (aPlayer != player) {
483 | player = [aPlayer mutableCopy];
484 | }
485 | }
486 |
487 | - (void)appendToCaption:(NSString *)string
488 | {
489 | [caption appendString:string];
490 | }
491 |
492 | - (void)appendToSource:(NSString *)string
493 | {
494 | [source appendString:string];
495 | }
496 |
497 | - (void)appendToPlayer:(NSString *)string
498 | {
499 | [player appendString:string];
500 | }
501 |
502 | - (NSString *)description
503 | {
504 | return [NSString stringWithFormat:@"%@, Video Caption: %@, Video Source: %@, Video Player: %@", [super description], self.caption, self.source, self.player];
505 | }
506 |
507 | @end
508 |
509 | @implementation TKPostAudio
510 |
511 | - (id)init
512 | {
513 | if ((self = [super init]) != nil) {
514 | type = TKPostTypeAudio;
515 | caption = [[NSMutableString alloc] init];
516 | player = [[NSMutableString alloc] init];
517 | }
518 |
519 | return self;
520 | }
521 |
522 |
523 | - (NSString *)caption
524 | {
525 | return [caption copy];
526 | }
527 |
528 | - (void)setCaption:(NSString *)aCaption
529 | {
530 | if (aCaption != caption) {
531 | caption = [aCaption mutableCopy];
532 | }
533 | }
534 |
535 | - (NSString *)player
536 | {
537 | return [player copy];
538 | }
539 |
540 | - (void)setPlayer:(NSString *)aPlayer
541 | {
542 | if (aPlayer != player) {
543 | player = [aPlayer mutableCopy];
544 | }
545 | }
546 |
547 | - (void)appendToCaption:(NSString *)string
548 | {
549 | [caption appendString:string];
550 | }
551 |
552 | - (void)appendToPlayer:(NSString *)string
553 | {
554 | [player appendString:string];
555 | }
556 |
557 | - (NSString *)description
558 | {
559 | return [NSString stringWithFormat:@"%@, Audio Caption: %@, Audio Player: %@", [super description], self.caption, self.player];
560 | }
561 |
562 | @end
563 |
--------------------------------------------------------------------------------
/TKPostsRequest.h:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | #import "TKRequest.h"
24 |
25 | @class TKPostsRequest;
26 | @class TKPostsResponse;
27 | @class TKPost;
28 |
29 | @protocol TKPostsRequestDelegate
30 |
31 | - (void)postsRequest:(TKPostsRequest *)request didReceiveResponse:(TKPostsResponse *)response;
32 | - (void)postsRequest:(TKPostsRequest *)request didFailWithError:(NSError *)error;
33 |
34 | @end
35 |
36 | @interface TKPostsRequest : TKRequest
37 | {
38 | @private
39 | NSDictionary *_options;
40 | NSMutableArray *_receivedPosts;
41 | NSXMLParser *_parser;
42 | NSString *_currentElementName;
43 | TKPost *_currentPost;
44 | }
45 |
46 | #pragma mark - API
47 |
48 | @property (weak, nonatomic) id delegate;
49 | @property (strong, readonly) NSDictionary *options;
50 |
51 | - (id)initWithOptions:(NSDictionary *)options delegate:(id)delegate;
52 |
53 | @end
54 |
55 | extern NSString const *TKPostsRequestDomainKey;
56 | extern NSString const *TKPostsRequestPostIDKey;
57 | extern NSString const *TKPostsRequestStartAtIndexKey;
58 | extern NSString const *TKPostsRequestNumberOfPostsKey;
--------------------------------------------------------------------------------
/TKPostsRequest.m:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | #import "TKPostsRequest.h"
24 | #import "TKPostsResponse.h"
25 | #import "TKPost.h"
26 |
27 | @implementation TKPostsRequest
28 |
29 | @synthesize delegate = _delegate;
30 |
31 | #pragma mark - NSObject
32 |
33 | - (void)dealloc;
34 | {
35 | _receivedPosts = nil;
36 | _options = nil;
37 | _parser = nil;
38 | }
39 |
40 | #pragma mark - NSXMLParserDelegate
41 |
42 | - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict;
43 | {
44 | _currentElementName = elementName;
45 |
46 | if ([elementName isEqualToString:@"post"])
47 | _currentPost = [TKPost postWithAttributes:attributeDict];
48 | }
49 |
50 | - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName;
51 | {
52 | if ([elementName isEqualToString:@"post"]) {
53 | [_receivedPosts addObject:_currentPost];
54 | }
55 | }
56 |
57 | #pragma clang diagnostic push
58 | #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
59 |
60 | - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;
61 | {
62 | static NSDictionary *elementToSelectorDict = nil;
63 |
64 | if (!elementToSelectorDict) {
65 | elementToSelectorDict = [[NSDictionary alloc] initWithObjectsAndKeys:
66 | @"appendToText:", @"text",
67 | @"appendToCaption:",@"caption",
68 | @"appendToPlayer:", @"player",
69 | @"appendToBody:", @"body",
70 | @"setURLWithString:", @"url",
71 | nil];
72 | }
73 |
74 | NSString *key = [[_currentElementName componentsSeparatedByString:@"-"] lastObject];
75 | SEL selector = NSSelectorFromString([elementToSelectorDict objectForKey:key]);
76 | if (selector && [_currentPost respondsToSelector:selector]) {
77 | [_currentPost performSelector:selector withObject:string];
78 | }
79 | }
80 |
81 | #pragma clang diagnostic pop
82 |
83 | - (void)parserDidEndDocument:(NSXMLParser *)parser;
84 | {
85 | _currentPost = nil;
86 | [self.delegate postsRequest:self didReceiveResponse:[TKPostsResponse responseWithPosts:_receivedPosts]];
87 | }
88 |
89 | #pragma mark - TKRequest
90 |
91 | - (NSURL *)URL;
92 | {
93 | NSMutableDictionary *options = [_options mutableCopy];
94 | NSString *domain = [options objectForKey:TKPostsRequestDomainKey];
95 | [options removeObjectForKey:TKPostsRequestDomainKey];
96 | NSMutableString *URLString = [NSMutableString stringWithFormat:@"http://%@/api/read?", domain];
97 |
98 | NSMutableArray *queryStringArray = [NSMutableArray array];
99 | for (NSString *key in [options allKeys]) {
100 | NSString *value = [options objectForKey:key];
101 | [queryStringArray addObject:[NSString stringWithFormat:@"%@=%@", key, value]];
102 | }
103 |
104 | [URLString appendString:[queryStringArray componentsJoinedByString:@"&"]];
105 | NSURL *URL = [NSURL URLWithString:URLString];
106 | return URL;
107 | }
108 |
109 | - (void)connectionDidFinishLoadingData:(NSData *)data;
110 | {
111 | _parser = [[NSXMLParser alloc] initWithData:data];
112 | [_parser setDelegate:self];
113 | [_parser parse];
114 | }
115 |
116 | - (void)connectionDidFailWithError:(NSError *)error;
117 | {
118 | [self.delegate postsRequest:self didFailWithError:error];
119 | }
120 |
121 | #pragma mark - API
122 |
123 | - (id)initWithOptions:(NSDictionary *)options delegate:(id)delegate;
124 | {
125 | if (!(self = [self init]))
126 | return nil;
127 |
128 | if (![options objectForKey:TKPostsRequestDomainKey])
129 | [NSException raise:@"TKPostsRequestDomainKey is mandatory" format:@"TKPostsRequestDomainKey is mandatory"];
130 |
131 | _receivedPosts = [[NSMutableArray alloc] init];
132 | _options = options;
133 | _delegate = delegate;
134 |
135 | return self;
136 | }
137 |
138 | - (NSDictionary *)options;
139 | {
140 | return _options;
141 | }
142 |
143 | @end
144 |
145 | NSString const *TKPostsRequestDomainKey = @"domain";
146 | NSString const *TKPostsRequestPostIDKey = @"id";
147 | NSString const *TKPostsRequestStartAtIndexKey = @"start";
148 | NSString const *TKPostsRequestNumberOfPostsKey = @"num";
149 |
--------------------------------------------------------------------------------
/TKPostsResponse.h:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | @interface TKPostsResponse : NSObject
24 |
25 | @property (strong, nonatomic) NSArray *posts;
26 |
27 | #pragma mark - API
28 |
29 | + (id)responseWithPosts:(NSArray *)posts;
30 | - (id)initWithPosts:(NSArray *)posts;
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/TKPostsResponse.m:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | #import "TKPostsResponse.h"
24 |
25 | @implementation TKPostsResponse
26 |
27 | @synthesize posts = _posts;
28 |
29 | #pragma mark - NSObject
30 |
31 |
32 | #pragma mark - API
33 |
34 | + (id)responseWithPosts:(NSArray *)posts;
35 | {
36 | return [[self alloc] initWithPosts:posts];
37 | }
38 |
39 | - (id)initWithPosts:(NSArray *)posts;
40 | {
41 | if (!(self = [self init]))
42 | return nil;
43 |
44 | _posts = posts;
45 |
46 | return self;
47 | }
48 |
49 | @end
50 |
--------------------------------------------------------------------------------
/TKRequest.h:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | @class TKRequest;
24 |
25 | @protocol TKRequestable
26 |
27 | @optional
28 | - (void)connectionDidFinishLoadingData:(NSData *)data;
29 | - (void)connectionDidFailWithError:(NSError *)error;
30 |
31 | @optional
32 | - (NSData *)HTTPBody;
33 |
34 | @required
35 | - (NSURL *)URL;
36 |
37 | @end
38 |
39 | #if TARGET_OS_MAC
40 | @interface TKRequest : NSObject
41 | #elif TARGET_OS_IPHONE
42 | @interface TKRequest : NSObject
43 | #endif
44 | {
45 | @protected
46 | NSURLConnection *_connection;
47 | NSMutableData *_receivedData;
48 | }
49 |
50 | #pragma mark - API
51 |
52 | - (void)start;
53 | - (void)cancel;
54 |
55 | @end
56 |
--------------------------------------------------------------------------------
/TKRequest.m:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | #import "TKRequest.h"
24 |
25 | #pragma GCC diagnostic ignored "-Wprotocol"
26 |
27 | @implementation TKRequest
28 |
29 | #pragma mark - NSObject
30 |
31 | - (id)init;
32 | {
33 | if (!(self = [super init]))
34 | return nil;
35 |
36 | _receivedData = [[NSMutableData alloc] init];
37 |
38 | return self;
39 | }
40 |
41 | - (void)dealloc;
42 | {
43 | [self cancel];
44 | _receivedData = nil;
45 | }
46 |
47 | #pragma mark - NSURLConnectionDelegate
48 |
49 | - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
50 | {
51 | [self connectionDidFailWithError:error];
52 | }
53 |
54 | #pragma mark - NSURLConnectionDataDelegate
55 |
56 | - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
57 | {
58 | NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *) response;
59 |
60 | if (200 == [HTTPResponse statusCode])
61 | return;
62 |
63 | [self cancel];
64 | [self connectionDidFailWithError:[NSError errorWithDomain:[NSHTTPURLResponse localizedStringForStatusCode:[HTTPResponse statusCode]] code:[HTTPResponse statusCode] userInfo:nil]];
65 | }
66 |
67 | - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
68 | {
69 | [_receivedData appendData:data];
70 | }
71 |
72 | - (void)connectionDidFinishLoading:(NSURLConnection *)connection;
73 | {
74 | [self connectionDidFinishLoadingData:_receivedData];
75 | _receivedData = nil;
76 | }
77 |
78 | #pragma mark - API
79 |
80 | - (void)start;
81 | {
82 | NSAssert(!_connection, @"start can't be called twice without being cancelled.");
83 | NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[self URL]];
84 |
85 | if ([self respondsToSelector:@selector(HTTPBody)]) {
86 | theRequest.HTTPMethod = @"POST";
87 | theRequest.HTTPBody = self.HTTPBody;
88 | }
89 | else {
90 | theRequest.HTTPMethod = @"GET";
91 | }
92 |
93 | _connection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
94 | }
95 |
96 | - (void)cancel;
97 | {
98 | [_connection cancel];
99 | _connection = nil;
100 | }
101 |
102 | @end
103 |
--------------------------------------------------------------------------------
/TKTumblelog.h:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2010, 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | typedef enum
24 | {
25 | TKTumblelogTypePublic,
26 | TKTumblelogTypePrivate,
27 | } TKTumblelogType;
28 |
29 | @interface TKTumblelog : NSObject
30 | {
31 | NSString *title;
32 | NSString *name;
33 | NSURL *URL;
34 | NSURL *avatarURL;
35 | NSNumber *privateID;
36 |
37 | BOOL primary;
38 |
39 | TKTumblelogType type;
40 | }
41 |
42 | @property (nonatomic,copy) NSString *title;
43 | @property (nonatomic,copy) NSString *name;
44 | @property (nonatomic,strong) NSURL *URL;
45 | @property (nonatomic,strong) NSURL *avatarURL;
46 | @property (nonatomic,strong) NSNumber *privateID;
47 | @property (nonatomic,assign) BOOL primary;
48 | @property (nonatomic,assign) TKTumblelogType type;
49 |
50 | + (id)tumblelogWithAttributes:(NSDictionary *)attributeDict;
51 | - (id)initWithAttributes:(NSDictionary *)attributeDict;
52 |
53 | @end
54 |
--------------------------------------------------------------------------------
/TKTumblelog.m:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2010, 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | #import "TKTumblelog.h"
24 |
25 |
26 | @implementation TKTumblelog
27 |
28 | @synthesize title, name, URL, avatarURL, privateID, primary, type;
29 |
30 | + (id)tumblelogWithAttributes:(NSDictionary *)attributeDict
31 | {
32 | return [(TKTumblelog *)[self alloc] initWithAttributes:attributeDict];
33 | }
34 |
35 | - (id)initWithAttributes:(NSDictionary *)attributeDict
36 | {
37 | if ((self = [super init]) != nil) {
38 | self.title = [attributeDict objectForKey:@"title"];
39 | self.name = [attributeDict objectForKey:@"name"];
40 | self.URL = [NSURL URLWithString:[attributeDict objectForKey:@"url"]];
41 | self.avatarURL = [NSURL URLWithString:[attributeDict objectForKey:@"avatar-url"]];
42 | self.privateID = [NSNumber numberWithInt:[[attributeDict objectForKey:@"private-id"] intValue]];
43 | self.primary = [[attributeDict objectForKey:@"is-primary"] isEqualToString:@"yes"];
44 | }
45 | return self;
46 | }
47 |
48 | - (NSString *)description
49 | {
50 | return [NSString stringWithFormat:@"Title: %@, Name: %@, URL: %@, Avatar URL: %@, Private ID: %@, Primary: %i",
51 | self.title,
52 | self.name,
53 | [self.URL absoluteString],
54 | [self.avatarURL absoluteString],
55 | self.privateID,
56 | self.primary];
57 | }
58 |
59 | @end
60 |
--------------------------------------------------------------------------------
/TKTumblelogsRequest.h:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | #import "TKRequest.h"
24 |
25 | @class TKTumblelog;
26 | @class TKTumblelogsRequest;
27 | @class TKTumblelogsResponse;
28 |
29 | @protocol TKTumblelogsRequestDelegate
30 |
31 | - (void)tumblelogsRequest:(TKTumblelogsRequest *)request didReceiveResponse:(TKTumblelogsResponse *)response;
32 |
33 | - (void)tumblelogsRequest:(TKTumblelogsRequest *)request didFailWithError:(NSError *)error;
34 |
35 | @end
36 |
37 | @interface TKTumblelogsRequest : TKRequest
38 | {
39 | @private
40 | NSDictionary *_options;
41 | NSMutableArray *_receivedTumblelogs;
42 | NSString *_currentElementName;
43 | TKTumblelog *_currentTumblelog;
44 | }
45 |
46 | @property(weak, nonatomic) id delegate;
47 |
48 | - (id)initWithOptions:(NSDictionary *)options delegate:(id )delegate;
49 |
50 | @end
51 |
52 | extern NSString const *TKTumblelogsRequestEmailKey;
53 | extern NSString const *TKTumblelogsRequestPasswordKey;
54 |
--------------------------------------------------------------------------------
/TKTumblelogsRequest.m:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | #import "TKTumblelogsRequest.h"
24 | #import "TKTumblelogsResponse.h"
25 | #import "TKTumblelog.h"
26 |
27 | @implementation TKTumblelogsRequest
28 |
29 | @synthesize delegate = _delegate;
30 |
31 | #pragma mark - NSObject
32 |
33 | - (void)dealloc;
34 | {
35 | _options = nil;
36 | _receivedTumblelogs = nil;
37 | }
38 |
39 | #pragma mark - NSXMLParserDelegate
40 |
41 | - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
42 | {
43 | _currentElementName = elementName;
44 |
45 | if ([elementName isEqualToString:@"tumblelog"])
46 | _currentTumblelog = [[TKTumblelog alloc] initWithAttributes:attributeDict];
47 | }
48 |
49 | - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
50 | {
51 | if ([elementName isEqualToString:@"tumblelog"]) {
52 | [_receivedTumblelogs addObject:_currentTumblelog];
53 | }
54 | }
55 |
56 | - (void)parserDidEndDocument:(NSXMLParser *)parser
57 | {
58 | [_delegate tumblelogsRequest:self didReceiveResponse:[TKTumblelogsResponse responseWithTumblelogs:_receivedTumblelogs]];
59 | }
60 |
61 | #pragma mark - TKRequest
62 |
63 | - (NSURL *)URL;
64 | {
65 | return [NSURL URLWithString:@"http://www.tumblr.com/api/authenticate"];
66 | }
67 |
68 | - (NSData *)HTTPBody;
69 | {
70 | NSString *HTTPBodyString = [NSString stringWithFormat:@"email=%@&password=%@",
71 | [_options objectForKey:TKTumblelogsRequestEmailKey],
72 | [_options objectForKey:TKTumblelogsRequestPasswordKey],
73 | nil];
74 | return [HTTPBodyString dataUsingEncoding:NSUTF8StringEncoding];
75 | }
76 |
77 | - (void)connectionDidFinishLoadingData:(NSData *)data;
78 | {
79 | _receivedTumblelogs = [[NSMutableArray alloc] init];
80 | NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
81 | [parser setDelegate:self];
82 | [parser parse];
83 | }
84 |
85 | - (void)connectionDidFailWithError:(NSError *)error
86 | {
87 | [_delegate tumblelogsRequest:self didFailWithError:error];
88 | }
89 |
90 | #pragma mark - API
91 |
92 | - (id)initWithOptions:(NSDictionary *)options delegate:(id)delegate;
93 | {
94 | if (!(self = [self init]))
95 | return nil;
96 |
97 | if (![options objectForKey:TKTumblelogsRequestEmailKey])
98 | [NSException raise:@"TKTumblelogsRequestEmailKey is mandatory" format:@"TKTumblelogsRequestEmailKey is mandatory"];
99 |
100 | if (![options objectForKey:TKTumblelogsRequestPasswordKey])
101 | [NSException raise:@"TKTumblelogsRequestPasswordKey is mandatory" format:@"TKTumblelogsRequestPasswordKey is mandatory"];
102 |
103 | _options = options;
104 | _delegate = delegate;
105 |
106 | return self;
107 | }
108 |
109 | @end
110 |
111 | NSString const *TKTumblelogsRequestEmailKey = @"email";
112 | NSString const *TKTumblelogsRequestPasswordKey = @"password";
113 |
--------------------------------------------------------------------------------
/TKTumblelogsResponse.h:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | @interface TKTumblelogsResponse : NSObject
24 |
25 | @property (nonatomic,strong) NSArray *tumblelogs;
26 |
27 | #pragma mark - API
28 |
29 | + (id)responseWithTumblelogs:(NSArray *)tumblelogs;
30 | - (id)initWithTumblelogs:(NSArray *)tumblelogs;
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/TKTumblelogsResponse.m:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | #import "TKTumblelogsResponse.h"
24 |
25 | @implementation TKTumblelogsResponse
26 |
27 | @synthesize tumblelogs = _tumblelogs;
28 |
29 | #pragma mark - NSObject
30 |
31 |
32 | #pragma mark - API
33 |
34 | + (id)responseWithTumblelogs:(NSArray *)tumblelogs;
35 | {
36 | return [[self alloc] initWithTumblelogs:tumblelogs];
37 | }
38 |
39 | - (id)initWithTumblelogs:(NSArray *)tumblelogs;
40 | {
41 | if (!(self = [self init]))
42 | return nil;
43 |
44 | _tumblelogs = tumblelogs;
45 |
46 | return self;
47 | }
48 |
49 | @end
50 |
--------------------------------------------------------------------------------
/TKTumblr.h:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2010, 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | #import "TKPost.h"
24 | #import "TKTumblrReadRequest.h"
25 | #import "TKTumblelog.h"
26 |
27 | #define Log(format, ...) NSLog(@"%s:%@", __PRETTY_FUNCTION__, [NSString stringWithFormat:format, ## __VA_ARGS__]);
28 |
29 | typedef enum
30 | {
31 | TKTumblrCreated = 201,
32 | TKTumblrBadRequest = 400,
33 | TKTumblrForbidden = 403
34 | } TKTumblrResponseReturnCode;
35 |
36 | @protocol TKTumblrDelegate
37 |
38 | @optional
39 | - (void)tumblrDidReceivePost:(TKPost *)thePost withDomain:(NSString *)theDomain;
40 | - (void)tumblrWillUploadPost:(TKPost *)thePost withDomain:(NSString *)theDomain;
41 | - (void)tumblrDidUploadPost:(TKPost *)thePost withDomain:(NSString *)theDomain postID:(NSNumber *)thePostID;
42 | - (void)tumblrDidFailToUploadPost:(TKPost *)thePost withDomain:(NSString *)theDomain returnCode:(TKTumblrResponseReturnCode)theReturnCode;
43 | - (void)tumblrDidReceiveTumblelog:(TKTumblelog *)theTumblelog;
44 |
45 | @end
46 |
47 | @interface TKTumblr : NSObject
48 | {
49 | id __weak delegate;
50 |
51 | NSString *email;
52 | NSString *password;
53 |
54 | TKTumblelog *currentTumblelog;
55 | TKPost *currentPost;
56 | TKPost *requestedPost;
57 | NSString *currentElementName;
58 | }
59 |
60 | @property (nonatomic,weak) id delegate;
61 | @property (nonatomic,copy) NSString *email;
62 | @property (nonatomic,copy) NSString *password;
63 | @property (nonatomic,strong) TKTumblelog *currentTumblelog;
64 | @property (nonatomic,strong) TKPost *currentPost;
65 | @property (nonatomic,strong) TKPost *requestedPost;
66 | @property (nonatomic,copy) NSString *currentElementName;
67 |
68 | - (id)initWithEmail:(NSString *)theEmail andPassword:(NSString *)thePassword;
69 | - (BOOL)uploadPost:(TKPost *)thePost;
70 | - (BOOL)uploadPost:(TKPost *)thePost withDomain:(NSString *)theDomain;
71 | - (void)postsWithReadRequest:(TKTumblrReadRequest *)theReadRequest;
72 | - (TKPost *)postWithID:(NSNumber *)thePostID andDomain:(NSString *)theDomain;
73 | - (NSDictionary *)attributesAsDictionary;
74 | - (NSArray *)tumblelogs;
75 |
76 | @end
77 |
--------------------------------------------------------------------------------
/TKTumblr.m:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2010, 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | #include "TKTumblr.h"
24 | #include "NSString+TumblrKit.h"
25 | #include "NSDictionary+TumblrKit.h"
26 | #include "TKTumblelog.h"
27 |
28 | @implementation TKTumblr
29 |
30 | @synthesize delegate, email, password, currentPost, currentElementName, requestedPost, currentTumblelog;
31 |
32 | - (id)initWithEmail:(NSString *)theEmail andPassword:(NSString *)thePassword
33 | {
34 | if ((self = [super init]) != nil) {
35 | self.email = theEmail;
36 | self.password = thePassword;
37 | self.currentTumblelog = nil;
38 | self.currentPost = nil;
39 | self.currentElementName = nil;
40 | self.requestedPost = nil;
41 | }
42 | return self;
43 | }
44 |
45 |
46 | - (TKPost *)postWithID:(NSNumber *)thePostID andDomain:(NSString *)theDomain
47 | {
48 | TKTumblrReadRequest *theReadRequest = [[TKTumblrReadRequest alloc] initWithPostID:thePostID andDomain:theDomain];
49 | NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:[theReadRequest endpoint]];
50 | id previousDelegate = [self delegate];
51 | [self setDelegate:self];
52 | [parser setDelegate:self];
53 | [parser parse];
54 | [self setDelegate:previousDelegate];
55 |
56 | TKPost *thePost = nil;
57 |
58 | if (requestedPost) {
59 | thePost = [self requestedPost];
60 | [self setRequestedPost:nil];
61 | }
62 |
63 | return thePost;
64 | }
65 |
66 | - (void)postsWithReadRequest:(TKTumblrReadRequest *)theReadRequest
67 | {
68 | NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:[theReadRequest endpoint]];
69 | [parser setDelegate:self];
70 | [parser parse];
71 | }
72 |
73 | - (BOOL)uploadPost:(TKPost *)thePost
74 | {
75 | return [self uploadPost:thePost withDomain:nil];
76 | }
77 |
78 | - (BOOL)uploadPost:(TKPost *)thePost withDomain:(NSString *)theDomain
79 | {
80 | NSMutableDictionary *postDict = (NSMutableDictionary *)[self attributesAsDictionary];
81 |
82 | if (theDomain)
83 | [postDict setObject:theDomain forKey:@"group"];
84 |
85 | [postDict addEntriesFromDictionary:[thePost attributesAsDictionary]];
86 |
87 | NSData *postBody = [postDict multipartMIMEData];
88 | NSMutableURLRequest *theURLRequest = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://www.tumblr.com/api/write"]];
89 |
90 | [theURLRequest setHTTPMethod:@"POST"];
91 | [theURLRequest setValue:@"8bit" forHTTPHeaderField:@"Content-Transfer-Encoding"];
92 | [theURLRequest setValue:[NSString stringWithFormat:@"%d", [postBody length]] forHTTPHeaderField:@"Content-Length"];
93 | [theURLRequest setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", [NSString MIMEBoundary]] forHTTPHeaderField:@"Content-Type"];
94 | [theURLRequest setHTTPBody:postBody];
95 |
96 |
97 | if (delegate && [delegate respondsToSelector:@selector(tumblrWillUploadPost:withDomain:)]) {
98 | [delegate tumblrWillUploadPost:thePost withDomain:theDomain];
99 | }
100 |
101 | NSError *error = nil;
102 | NSHTTPURLResponse *theURLResponse = nil;
103 | NSData *responseData = [NSURLConnection sendSynchronousRequest:theURLRequest
104 | returningResponse:&theURLResponse
105 | error:&error];
106 |
107 | // Release the request before we can enter some potentially dangerous
108 | // code path.
109 |
110 | // Bail out quickly if NSURLConnection populated error.
111 | if (([theURLResponse statusCode] != TKTumblrCreated)) {
112 | if (delegate && [delegate respondsToSelector:@selector(tumblrDidFailToUploadPost:withDomain:returnCode:)]) {
113 | [delegate tumblrDidFailToUploadPost:thePost
114 | withDomain:theDomain
115 | returnCode:(TKTumblrResponseReturnCode)[theURLResponse statusCode]];
116 | }
117 | return NO;
118 | }
119 |
120 | // The following code will only execute when we get a TKTumblrCreated response, so it's
121 | // safe to assume that responseData will have only the postID of the post we created.
122 | NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
123 | [formatter setNumberStyle:NSNumberFormatterDecimalStyle];
124 | NSNumber *postID = [formatter numberFromString:[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]];
125 |
126 | if (delegate && [delegate respondsToSelector:@selector(tumblrDidUploadPost:withDomain:postID:)]) {
127 | [delegate tumblrDidUploadPost:thePost withDomain:theDomain postID:postID];
128 | }
129 |
130 | return YES;
131 | }
132 |
133 | - (NSDictionary *)attributesAsDictionary
134 | {
135 | NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:
136 | email, @"email",
137 | password, @"password",
138 | nil];
139 | return dict;
140 | }
141 |
142 | - (NSArray *)tumblelogs
143 | {
144 | NSString *theURLString = [NSString stringWithFormat:@"https://www.tumblr.com/api/authenticate?email=%@&password=%@",
145 | [email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
146 | [password stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
147 | NSURL *theURL = [NSURL URLWithString:theURLString];
148 | NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:theURL];
149 | [parser setDelegate:self];
150 | [parser parse];
151 |
152 | return nil;
153 | }
154 |
155 | #pragma mark NSXMLParserDelegate
156 |
157 | - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
158 | {
159 | self.currentElementName = elementName;
160 |
161 | if ([elementName isEqualToString:@"post"]) {
162 | self.currentPost = [TKPost postWithAttributes:attributeDict];
163 | }
164 | else if ([elementName isEqualToString:@"tumblelog"]) {
165 | self.currentTumblelog = [TKTumblelog tumblelogWithAttributes:attributeDict];
166 | }
167 | }
168 |
169 | - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
170 | {
171 | if ([elementName isEqualToString:@"post"]) {
172 | if (currentPost != nil) {
173 | if (delegate && [delegate respondsToSelector:@selector(tumblrDidReceivePost:withDomain:)]) {
174 | [delegate tumblrDidReceivePost:currentPost withDomain:@""];
175 | }
176 | }
177 | self.currentPost = nil;
178 | }
179 | else if ([elementName isEqualToString:@"tumblelog"]) {
180 | if (currentTumblelog != nil) {
181 | if (delegate && [delegate respondsToSelector:@selector(tumblrDidReceiveTumblelog:)]) {
182 | [delegate tumblrDidReceiveTumblelog:currentTumblelog];
183 | }
184 | }
185 | self.currentTumblelog = nil;
186 | }
187 | }
188 |
189 | #pragma clang diagnostic push
190 | #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
191 |
192 | - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
193 | {
194 | static NSDictionary *elementToSelectorDict = nil;
195 |
196 | if (!elementToSelectorDict) {
197 | elementToSelectorDict = [NSDictionary dictionaryWithObjectsAndKeys:
198 | @"appendToText:", @"text",
199 | @"appendToCaption:",@"caption",
200 | @"appendToPlayer:", @"player",
201 | @"appendToBody:", @"body",
202 | @"setURLWithString:", @"url",
203 | nil];
204 | }
205 |
206 | NSString *key = [[currentElementName componentsSeparatedByString:@"-"] lastObject];
207 | SEL selector = NSSelectorFromString([elementToSelectorDict objectForKey:key]);
208 | if (selector) {
209 | [currentPost performSelector:selector withObject:string];
210 | }
211 | }
212 |
213 | #pragma clang diagnostic pop
214 |
215 | #pragma mark TKTumblrDelegate
216 |
217 | - (void)tumblrDidReceivePost:(TKPost *)thePost withDomain:(NSString *)theDomain
218 | {
219 | [self setRequestedPost:thePost];
220 | }
221 |
222 | @end
223 |
--------------------------------------------------------------------------------
/TKTumblrReadRequest.h:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2010, 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | #import
24 | #import "TKPost.h"
25 |
26 | /**
27 | The TKTumblrReadRequest class is responsible to encapsulate the parameters
28 | used to retrieve one or a set of posts from Tumblr, represented in
29 | TumblrKit as TKPost objects.
30 | */
31 | @interface TKTumblrReadRequest : NSObject
32 | {
33 | /** This represents the offset we want to use to fetch a series of posts. */
34 | NSNumber *start;
35 |
36 | /** This represents the limit we want to use to fetch a series of posts. */
37 | NSNumber *numOfPosts;
38 |
39 | /** The ID of the post we want to fetch. */
40 | NSNumber *postID;
41 |
42 | /** The search string to look for posts. */
43 | NSString *search;
44 |
45 | /** The origin group (or domain) we want to fetch posts. */
46 | NSString *group;
47 |
48 | /** The type of posts we want to fetch. */
49 | TKPostType type;
50 |
51 | /** The filter we want to use when fetching posts. */
52 | TKPostFilter filter;
53 |
54 | /** The state of posts we want to fetch (requires authentication). */
55 | TKPostState state;
56 | }
57 |
58 | @property (copy) NSNumber *start;
59 | @property (copy) NSNumber *numOfPosts;
60 | @property (copy) NSNumber *postID;
61 | @property (copy) NSString *search;
62 | @property (copy) NSString *group;
63 |
64 | @property (assign) TKPostType type;
65 | @property (assign) TKPostFilter filter;
66 | @property (assign) TKPostState state;
67 |
68 | /**
69 | Initialize a TKTumblrReadRequest with a postID and a domain.
70 | */
71 | - (id)initWithPostID:(NSNumber *)thePostID andDomain:(NSString *)theDomain;
72 |
73 | /**
74 | The resulting endpoint (with query parameters) used to fetch the posts.
75 | */
76 | - (NSURL *)endpoint;
77 |
78 | @end
79 |
--------------------------------------------------------------------------------
/TKTumblrReadRequest.m:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2010, 2011 TumblrKit
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | //
22 |
23 | #import "TKTumblrReadRequest.h"
24 |
25 | static NSString *TKPostTypeAsQueryString[] =
26 | {
27 | @"all",
28 | @"text",
29 | @"link",
30 | @"quote",
31 | @"photo",
32 | @"chat",
33 | @"video",
34 | @"audio",
35 | @"answer"
36 | };
37 |
38 | static NSString *TKPostFilterAsQueryString[] =
39 | {
40 | @"html",
41 | @"text",
42 | @"none"
43 | };
44 |
45 | @implementation TKTumblrReadRequest
46 |
47 | @synthesize start, numOfPosts, postID, search, type, filter, state, group;
48 |
49 | - (id)init
50 | {
51 | if ((self = [super init]) != nil) {
52 | self.start = [NSNumber numberWithInt:0];
53 | self.numOfPosts = [NSNumber numberWithInt:20];
54 | self.postID = nil;
55 | self.search = nil;
56 | self.group = nil;
57 | self.type = TKPostTypeAll;
58 | self.state = TKPostStateAll;
59 | self.filter = TKPostFilterNone;
60 | }
61 |
62 | return self;
63 | }
64 |
65 | - (id)initWithPostID:(NSNumber *)thePostID andDomain:(NSString *)theDomain
66 | {
67 | if ((self = [self init]) != nil) {
68 | self.postID = thePostID;
69 | self.group = theDomain;
70 | }
71 |
72 | return self;
73 | }
74 |
75 |
76 | - (NSURL *)endpoint
77 | {
78 | NSMutableString *endpointString = [[NSMutableString alloc] initWithFormat:@"http://%@/api/read", group];
79 | NSURL *endpoint = nil;
80 |
81 | if (postID) {
82 | [endpointString appendFormat:@"?id=%@&", postID];
83 | }
84 | else {
85 | [endpointString appendFormat:@"?start=%@&num=%@&", start, numOfPosts];
86 |
87 | if (type != TKPostTypeAll && type != TKPostTypeAnswer) {
88 | [endpointString appendFormat:@"type=%@&", TKPostTypeAsQueryString[type]];
89 | }
90 | }
91 |
92 | [endpointString appendFormat:@"filter=%@", TKPostFilterAsQueryString[filter]];
93 | endpoint = [NSURL URLWithString:endpointString];
94 | return endpoint;
95 | }
96 |
97 | @end
98 |
--------------------------------------------------------------------------------
/TumblrKit Tests for Mac/TumblrKit Tests for Mac-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | com.qiih.${PRODUCT_NAME:rfc1034identifier}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundlePackageType
14 | BNDL
15 | CFBundleShortVersionString
16 | 1.0
17 | CFBundleSignature
18 | ????
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/TumblrKit Tests for Mac/TumblrKit Tests for Mac-Prefix.pch:
--------------------------------------------------------------------------------
1 | //
2 | // Prefix header for all source files of the 'TumblrKit Tests for Mac' target in the 'TumblrKit Tests for Mac' project
3 | //
4 |
5 | #ifdef __OBJC__
6 | #import
7 | #endif
8 |
--------------------------------------------------------------------------------
/TumblrKit Tests for Mac/TumblrKit_Tests_for_Mac.h:
--------------------------------------------------------------------------------
1 | //
2 | // TumblrKit_Tests_for_Mac.h
3 | // TumblrKit Tests for Mac
4 | //
5 | // Created by Igor Sutton on 12/14/11.
6 | // Copyright (c) 2011 igorsutton.com. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "TKPostsRequest.h"
11 | #import "TKTumblelogsRequest.h"
12 |
13 | @interface TumblrKit_Tests_for_Mac : SenTestCase
14 | {
15 | BOOL _testIsDone;
16 | }
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/TumblrKit Tests for Mac/TumblrKit_Tests_for_Mac.m:
--------------------------------------------------------------------------------
1 | //
2 | // TumblrKit_Tests_for_Mac.m
3 | // TumblrKit Tests for Mac
4 | //
5 | // Created by Igor Sutton on 12/14/11.
6 | // Copyright (c) 2011 igorsutton.com. All rights reserved.
7 | //
8 |
9 | #import "TumblrKit_Tests_for_Mac.h"
10 | #import "TKPost.h"
11 | #import "TKPostsResponse.h"
12 | #import "TKTumblelog.h"
13 | #import "TKTumblelogsResponse.h"
14 |
15 | @implementation TumblrKit_Tests_for_Mac
16 |
17 | - (void)setUp;
18 | {
19 | _testIsDone = NO;
20 | [super setUp];
21 | }
22 |
23 | - (void)tearDown;
24 | {
25 | [super tearDown];
26 | }
27 |
28 | - (void)testPostsRequest001;
29 | {
30 | NSMutableDictionary *options = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"tumblrkit-test.tumblr.com", TKPostsRequestDomainKey, nil];
31 | TKPostsRequest *request = [[TKPostsRequest alloc] initWithOptions:options delegate:self];
32 | STAssertEqualObjects([[request URL] absoluteString], @"http://tumblrkit-test.tumblr.com/api/read?", @"");
33 |
34 | [options setObject:[NSNumber numberWithInt:10] forKey:TKPostsRequestNumberOfPostsKey];
35 | request = [[TKPostsRequest alloc] initWithOptions:options delegate:self];
36 | STAssertEqualObjects([[request URL] absoluteString], @"http://tumblrkit-test.tumblr.com/api/read?num=10", nil);
37 |
38 | [options setObject:[NSNumber numberWithInt:10] forKey:TKPostsRequestStartAtIndexKey];
39 | request = [[TKPostsRequest alloc] initWithOptions:options delegate:self];
40 | STAssertEqualObjects([[request URL] absoluteString], @"http://tumblrkit-test.tumblr.com/api/read?num=10&start=10", nil);
41 |
42 | [options setObject:[NSNumber numberWithInt:10] forKey:TKPostsRequestPostIDKey];
43 | request = [[TKPostsRequest alloc] initWithOptions:options delegate:self];
44 | STAssertEqualObjects([[request URL] absoluteString], @"http://tumblrkit-test.tumblr.com/api/read?num=10&id=10&start=10", nil);
45 | }
46 |
47 | - (void)testPostsRequest002;
48 | {
49 | NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
50 | @"tumblrkit-test.tumblr.com", TKPostsRequestDomainKey,
51 | [NSNumber numberWithInt:10], TKPostsRequestNumberOfPostsKey,
52 | nil];
53 | TKPostsRequest *request = [[TKPostsRequest alloc] initWithOptions:options delegate:self];
54 | [request start];
55 |
56 | while (!_testIsDone)
57 | [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:1.0]];
58 |
59 | }
60 |
61 | - (void)testPostsRequest003;
62 | {
63 | NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
64 | @"tumblrkit-test.tumblr.com", TKPostsRequestDomainKey,
65 | [NSNumber numberWithInt:10], TKPostsRequestNumberOfPostsKey,
66 | [NSNumber numberWithInt:5], TKPostsRequestStartAtIndexKey,
67 | nil];
68 |
69 | TKPostsRequest *request = [[TKPostsRequest alloc] initWithOptions:options delegate:self];
70 | [request start];
71 |
72 | while (!_testIsDone)
73 | [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:1.0]];
74 | }
75 |
76 | - (void)testPostsRequest004;
77 | {
78 | NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
79 | @"tumblrkit-test.tumblr.com", TKPostsRequestDomainKey,
80 | [NSNumber numberWithLong:8819125974], TKPostsRequestPostIDKey,
81 | nil];
82 |
83 | TKPostsRequest *request = [[TKPostsRequest alloc] initWithOptions:options delegate:self];
84 | [request start];
85 |
86 | while (!_testIsDone)
87 | [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:1.0]];
88 | }
89 |
90 | - (void)testTumblelogsRequest001;
91 | {
92 | NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
93 | @"email", TKTumblelogsRequestEmailKey,
94 | @"password", TKTumblelogsRequestPasswordKey,
95 | nil];
96 |
97 | TKTumblelogsRequest *request = [[TKTumblelogsRequest alloc] initWithOptions:options delegate:self];
98 | [request start];
99 |
100 | while (!_testIsDone)
101 | [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:1.0]];
102 | }
103 |
104 | #pragma mark - TKPostsRequestDelegate
105 |
106 | - (void)postsRequest:(TKPostsRequest *)request didReceiveResponse:(TKPostsResponse *)response;
107 | {
108 | _testIsDone = YES;
109 |
110 | if ([request.options objectForKey:TKPostsRequestNumberOfPostsKey])
111 | STAssertEquals([[request.options objectForKey:TKPostsRequestNumberOfPostsKey] intValue], (int)[response.posts count], nil);
112 |
113 | if ([request.options objectForKey:TKPostsRequestPostIDKey]) {
114 | STAssertEquals((int)[response.posts count], 1, nil);
115 | TKPost *post = [response.posts objectAtIndex:0];
116 | NSNumber *postID = [NSNumber numberWithLong:[post.postID longLongValue]];
117 | STAssertEquals([request.options objectForKey:TKPostsRequestPostIDKey], postID, nil);
118 | }
119 | }
120 |
121 | - (void)postsRequest:(TKPostsRequest *)request didFailWithError:(NSError *)error;
122 | {
123 | _testIsDone = YES;
124 |
125 | STFail(@"%@", error);
126 | }
127 |
128 | #pragma mark - TKTumblelogsRequestDelegate
129 |
130 | - (void)tumblelogsRequest:(TKTumblelogsRequest *)request didReceiveResponse:(TKTumblelogsResponse *)response;
131 | {
132 | _testIsDone = YES;
133 |
134 | NSLog(@"Tumblelogs: %lu", [response.tumblelogs count]);
135 | }
136 |
137 | - (void)tumblelogsRequest:(TKTumblelogsRequest *)request didFailWithError:(NSError *)error;
138 | {
139 | _testIsDone = YES;
140 |
141 | STFail(@"%@", error);
142 | }
143 |
144 | @end
145 |
--------------------------------------------------------------------------------
/TumblrKit Tests for Mac/en.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /* Localized versions of Info.plist keys */
2 |
3 |
--------------------------------------------------------------------------------
/TumblrKit Tests for iOS/TKTumblelogsRequestTests.h:
--------------------------------------------------------------------------------
1 | //
2 | // TKTumblelogsRequestTests.h
3 | // TumblrKit
4 | //
5 | // Created by Igor Sutton on 05/31/12.
6 | // Copyright (c) 2012 __MyCompanyName__. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "TKTumblelogsRequest.h"
11 |
12 | @interface TKTumblelogsRequestTests : SenTestCase
13 |
14 | @end
15 |
--------------------------------------------------------------------------------
/TumblrKit Tests for iOS/TKTumblelogsRequestTests.m:
--------------------------------------------------------------------------------
1 | //
2 | // TKTumblelogsRequestTests.m
3 | // TumblrKit
4 | //
5 | // Created by Igor Sutton on 05/31/12.
6 | // Copyright (c) 2012 __MyCompanyName__. All rights reserved.
7 | //
8 |
9 | #import "TKTumblelogsRequestTests.h"
10 | #import "TKTumblelogsResponse.h"
11 | #import "TKTumblelog.h"
12 |
13 | @implementation TKTumblelogsRequestTests
14 | {
15 | NSArray *tumblelogs;
16 | BOOL requestHasFinished;
17 | void (^didReceiveResponseBlock)(TKTumblelogsResponse *response);
18 | void (^didFailWithErrorBlock)(NSError *error);
19 | }
20 |
21 | - (void)setUp
22 | {
23 | requestHasFinished = NO;
24 | }
25 |
26 | - (void)tearDown
27 | {
28 |
29 | }
30 |
31 | - (void)testSuccessfulRequest
32 | {
33 | NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:@"", TKTumblelogsRequestEmailKey, @"", TKTumblelogsRequestPasswordKey, nil];
34 | TKTumblelogsRequest *request = [[TKTumblelogsRequest alloc] initWithOptions:options delegate:self];
35 | [request start];
36 |
37 | didFailWithErrorBlock = ^(NSError *error) {
38 | requestHasFinished = YES;
39 | STFail(@"An error occurred: %@", error);
40 | };
41 |
42 | didReceiveResponseBlock = ^(TKTumblelogsResponse *response) {
43 | requestHasFinished = YES;
44 | tumblelogs = response.tumblelogs;
45 | };
46 |
47 | // Keep running the mainRunLoop until the request has finished.
48 | while (!requestHasFinished) {
49 | [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]];
50 | }
51 |
52 | STAssertNotNil(tumblelogs, nil);
53 | STAssertTrue([tumblelogs count] == 6, nil);
54 |
55 | TKTumblelog *tumblelog = [tumblelogs lastObject];
56 | STAssertEqualObjects(tumblelog.title, @"TumblrKit test", nil);
57 | STAssertEqualObjects(tumblelog.name, @"tumblrkit-test", nil);
58 | STAssertEqualObjects(tumblelog.URL, [NSURL URLWithString:@"http://tumblrkit-test.tumblr.com/"], nil);
59 | }
60 |
61 | - (void)testForbiddenRequest
62 | {
63 | NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:@"foo@bar", TKTumblelogsRequestEmailKey, @"baz", TKTumblelogsRequestPasswordKey, nil];
64 | TKTumblelogsRequest *request = [[TKTumblelogsRequest alloc] initWithOptions:options delegate:self];
65 | [request start];
66 |
67 | didFailWithErrorBlock = ^(NSError *error) {
68 | requestHasFinished = YES;
69 | STAssertTrue(403 == [error code], nil);
70 | };
71 |
72 | didReceiveResponseBlock = ^(TKTumblelogsResponse *response) {
73 | requestHasFinished = YES;
74 | STFail(@"Request should fail");
75 | };
76 |
77 | // Keep running the mainRunLoop until the request has finished.
78 | while (!requestHasFinished) {
79 | [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]];
80 | }
81 | }
82 |
83 | - (void)tumblelogsRequest:(TKTumblelogsRequest *)request didReceiveResponse:(TKTumblelogsResponse *)response
84 | {
85 | didReceiveResponseBlock(response);
86 | }
87 |
88 | - (void)tumblelogsRequest:(TKTumblelogsRequest *)request didFailWithError:(NSError *)error
89 | {
90 | didFailWithErrorBlock(error);
91 | }
92 |
93 | @end
94 |
--------------------------------------------------------------------------------
/TumblrKit Tests for iOS/TumblrKit Tests for iOS-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | com.qiih.${PRODUCT_NAME:rfc1034identifier}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundlePackageType
14 | BNDL
15 | CFBundleShortVersionString
16 | 1.0
17 | CFBundleSignature
18 | ????
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/TumblrKit Tests for iOS/TumblrKit Tests for iOS-Prefix.pch:
--------------------------------------------------------------------------------
1 | //
2 | // Prefix header for all source files of the 'TumblrKit Tests for iOS' target in the 'TumblrKit Tests for iOS' project
3 | //
4 |
5 | #ifdef __OBJC__
6 | #import
7 | #import
8 | #endif
9 |
--------------------------------------------------------------------------------
/TumblrKit Tests for iOS/TumblrKit_Tests_for_iOS.h:
--------------------------------------------------------------------------------
1 | //
2 | // TumblrKit_Tests_for_iOS.h
3 | // TumblrKit Tests for iOS
4 | //
5 | // Created by Igor Sutton on 5/31/12.
6 | // Copyright (c) 2012 igorsutton.com. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TumblrKit_Tests_for_iOS : SenTestCase
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/TumblrKit Tests for iOS/TumblrKit_Tests_for_iOS.m:
--------------------------------------------------------------------------------
1 | //
2 | // TumblrKit_Tests_for_iOS.m
3 | // TumblrKit Tests for iOS
4 | //
5 | // Created by Igor Sutton on 5/31/12.
6 | // Copyright (c) 2012 igorsutton.com. All rights reserved.
7 | //
8 |
9 | #import "TumblrKit_Tests_for_iOS.h"
10 |
11 | @implementation TumblrKit_Tests_for_iOS
12 |
13 | - (void)setUp
14 | {
15 | [super setUp];
16 |
17 | // Set-up code here.
18 | }
19 |
20 | - (void)tearDown
21 | {
22 | // Tear-down code here.
23 |
24 | [super tearDown];
25 | }
26 |
27 | - (void)testExample
28 | {
29 | STFail(@"Unit tests are not implemented yet in TumblrKit Tests for iOS");
30 | }
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/TumblrKit Tests for iOS/en.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /* Localized versions of Info.plist keys */
2 |
3 |
--------------------------------------------------------------------------------
/TumblrKit for Mac/TumblrKit for Mac-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | English
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | com.qiih.${PRODUCT_NAME:rfc1034identifier}
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | ${PRODUCT_NAME}
17 | CFBundlePackageType
18 | FMWK
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | 1
25 | NSHumanReadableCopyright
26 | Copyright © 2011 igorsutton.com. All rights reserved.
27 | NSPrincipalClass
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/TumblrKit for Mac/TumblrKit for Mac-Prefix.pch:
--------------------------------------------------------------------------------
1 | //
2 | // Prefix header for all source files of the 'TumblrKit for Mac' target in the 'TumblrKit for Mac' project
3 | //
4 |
5 | #ifdef __OBJC__
6 | #import
7 | #endif
8 |
--------------------------------------------------------------------------------
/TumblrKit for Mac/TumblrKit_for_Mac.h:
--------------------------------------------------------------------------------
1 | //
2 | // TumblrKit_for_Mac.h
3 | // TumblrKit for Mac
4 | //
5 | // Created by Igor Sutton on 12/13/11.
6 | // Copyright (c) 2011 igorsutton.com. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TumblrKit_for_Mac : NSObject
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/TumblrKit for Mac/TumblrKit_for_Mac.m:
--------------------------------------------------------------------------------
1 | //
2 | // TumblrKit_for_Mac.m
3 | // TumblrKit for Mac
4 | //
5 | // Created by Igor Sutton on 12/13/11.
6 | // Copyright (c) 2011 igorsutton.com. All rights reserved.
7 | //
8 |
9 | #import "TumblrKit_for_Mac.h"
10 |
11 | @implementation TumblrKit_for_Mac
12 |
13 | - (id)init
14 | {
15 | self = [super init];
16 | if (self) {
17 | // Initialization code here.
18 | }
19 |
20 | return self;
21 | }
22 |
23 | @end
24 |
--------------------------------------------------------------------------------
/TumblrKit for Mac/en.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /* Localized versions of Info.plist keys */
2 |
3 |
--------------------------------------------------------------------------------
/TumblrKit for iOS/TumblrKit for iOS-Prefix.pch:
--------------------------------------------------------------------------------
1 | //
2 | // Prefix header for all source files of the 'TumblrKit for iOS' target in the 'TumblrKit for iOS' project
3 | //
4 |
5 | #ifdef __OBJC__
6 | #import
7 | #import
8 | #endif
9 |
--------------------------------------------------------------------------------
/TumblrKit for iOS/TumblrKit_for_iOS.h:
--------------------------------------------------------------------------------
1 | //
2 | // TumblrKit_for_iOS.h
3 | // TumblrKit for iOS
4 | //
5 | // Created by Igor Sutton on 12/13/11.
6 | // Copyright (c) 2011 igorsutton.com. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TumblrKit_for_iOS : NSObject
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/TumblrKit for iOS/TumblrKit_for_iOS.m:
--------------------------------------------------------------------------------
1 | //
2 | // TumblrKit_for_iOS.m
3 | // TumblrKit for iOS
4 | //
5 | // Created by Igor Sutton on 12/13/11.
6 | // Copyright (c) 2011 igorsutton.com. All rights reserved.
7 | //
8 |
9 | #import "TumblrKit_for_iOS.h"
10 |
11 | @implementation TumblrKit_for_iOS
12 |
13 | - (id)init
14 | {
15 | self = [super init];
16 | if (self) {
17 | // Initialization code here.
18 | }
19 |
20 | return self;
21 | }
22 |
23 | @end
24 |
--------------------------------------------------------------------------------
/TumblrKit.xcodeproj/igorsutton.mode2v3:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | ActivePerspectiveName
6 | Project
7 | AllowedModules
8 |
9 |
10 | BundleLoadPath
11 |
12 | MaxInstances
13 | n
14 | Module
15 | PBXSmartGroupTreeModule
16 | Name
17 | Groups and Files Outline View
18 |
19 |
20 | BundleLoadPath
21 |
22 | MaxInstances
23 | n
24 | Module
25 | PBXNavigatorGroup
26 | Name
27 | Editor
28 |
29 |
30 | BundleLoadPath
31 |
32 | MaxInstances
33 | n
34 | Module
35 | XCTaskListModule
36 | Name
37 | Task List
38 |
39 |
40 | BundleLoadPath
41 |
42 | MaxInstances
43 | n
44 | Module
45 | XCDetailModule
46 | Name
47 | File and Smart Group Detail Viewer
48 |
49 |
50 | BundleLoadPath
51 |
52 | MaxInstances
53 | 1
54 | Module
55 | PBXBuildResultsModule
56 | Name
57 | Detailed Build Results Viewer
58 |
59 |
60 | BundleLoadPath
61 |
62 | MaxInstances
63 | 1
64 | Module
65 | PBXProjectFindModule
66 | Name
67 | Project Batch Find Tool
68 |
69 |
70 | BundleLoadPath
71 |
72 | MaxInstances
73 | n
74 | Module
75 | XCProjectFormatConflictsModule
76 | Name
77 | Project Format Conflicts List
78 |
79 |
80 | BundleLoadPath
81 |
82 | MaxInstances
83 | n
84 | Module
85 | PBXBookmarksModule
86 | Name
87 | Bookmarks Tool
88 |
89 |
90 | BundleLoadPath
91 |
92 | MaxInstances
93 | n
94 | Module
95 | PBXClassBrowserModule
96 | Name
97 | Class Browser
98 |
99 |
100 | BundleLoadPath
101 |
102 | MaxInstances
103 | n
104 | Module
105 | PBXCVSModule
106 | Name
107 | Source Code Control Tool
108 |
109 |
110 | BundleLoadPath
111 |
112 | MaxInstances
113 | n
114 | Module
115 | PBXDebugBreakpointsModule
116 | Name
117 | Debug Breakpoints Tool
118 |
119 |
120 | BundleLoadPath
121 |
122 | MaxInstances
123 | n
124 | Module
125 | XCDockableInspector
126 | Name
127 | Inspector
128 |
129 |
130 | BundleLoadPath
131 |
132 | MaxInstances
133 | n
134 | Module
135 | PBXOpenQuicklyModule
136 | Name
137 | Open Quickly Tool
138 |
139 |
140 | BundleLoadPath
141 |
142 | MaxInstances
143 | 1
144 | Module
145 | PBXDebugSessionModule
146 | Name
147 | Debugger
148 |
149 |
150 | BundleLoadPath
151 |
152 | MaxInstances
153 | 1
154 | Module
155 | PBXDebugCLIModule
156 | Name
157 | Debug Console
158 |
159 |
160 | BundleLoadPath
161 |
162 | MaxInstances
163 | n
164 | Module
165 | XCSnapshotModule
166 | Name
167 | Snapshots Tool
168 |
169 |
170 | BundlePath
171 | /Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources
172 | Description
173 | CondensedDescriptionKey
174 | DockingSystemVisible
175 |
176 | Extension
177 | mode2v3
178 | FavBarConfig
179 |
180 | PBXProjectModuleGUID
181 | 827E467111EB0D5D00684466
182 | XCBarModuleItemNames
183 |
184 | XCBarModuleItems
185 |
186 |
187 | FirstTimeWindowDisplayed
188 |
189 | Identifier
190 | com.apple.perspectives.project.mode2v3
191 | MajorVersion
192 | 34
193 | MinorVersion
194 | 0
195 | Name
196 | Condensed
197 | Notifications
198 |
199 | OpenEditors
200 |
201 |
202 | Content
203 |
204 | PBXProjectModuleGUID
205 | 82A53D9011ED1E0D006BA92A
206 | PBXProjectModuleLabel
207 | Test.m
208 | PBXSplitModuleInNavigatorKey
209 |
210 | Split0
211 |
212 | PBXProjectModuleGUID
213 | 82A53D9111ED1E0D006BA92A
214 | PBXProjectModuleLabel
215 | Test.m
216 | _historyCapacity
217 | 10
218 | bookmark
219 | 82A53D9711ED1E4B006BA92A
220 | history
221 |
222 | 82A53D9211ED1E0D006BA92A
223 |
224 |
225 | SplitCount
226 | 1
227 |
228 | StatusBarVisibility
229 |
230 |
231 | Geometry
232 |
233 | Frame
234 | {{0, 20}, {1060, 1026}}
235 | PBXModuleWindowStatusBarHidden2
236 |
237 | RubberWindowFrame
238 | 15 106 1060 1067 0 0 1920 1178
239 |
240 |
241 |
242 | Content
243 |
244 | PBXProjectModuleGUID
245 | 82A53D9811ED1E4B006BA92A
246 | PBXProjectModuleLabel
247 | TKTumblrConnection.h
248 | PBXSplitModuleInNavigatorKey
249 |
250 | Split0
251 |
252 | PBXProjectModuleGUID
253 | 82A53D9911ED1E4B006BA92A
254 | PBXProjectModuleLabel
255 | TKTumblrConnection.h
256 | _historyCapacity
257 | 10
258 | bookmark
259 | 82A53D9C11ED1E4B006BA92A
260 | history
261 |
262 | 82A53D9A11ED1E4B006BA92A
263 | 82A53D9B11ED1E4B006BA92A
264 |
265 |
266 | SplitCount
267 | 1
268 |
269 | StatusBarVisibility
270 |
271 |
272 | Geometry
273 |
274 | Frame
275 | {{0, 20}, {992, 1021}}
276 | PBXModuleWindowStatusBarHidden2
277 |
278 | RubberWindowFrame
279 | 84 48 992 1062 0 0 1920 1178
280 |
281 |
282 |
283 | PerspectiveWidths
284 |
285 | -1
286 |
287 | Perspectives
288 |
289 |
290 | ChosenToolbarItems
291 |
292 | active-combo-popup
293 | debugger-enable-breakpoints
294 | build-and-go
295 | com.apple.ide.PBXToolbarStopButton
296 | NSToolbarFlexibleSpaceItem
297 | get-info
298 |
299 | ControllerClassBaseName
300 |
301 | IconName
302 | WindowOfProject
303 | Identifier
304 | perspective.project
305 | IsVertical
306 |
307 | Layout
308 |
309 |
310 | Proportion
311 | 446pt
312 | Tabs
313 |
314 |
315 | BecomeActive
316 |
317 | ContentConfiguration
318 |
319 | PBXBottomSmartGroupGIDs
320 |
321 | PBXProjectModuleGUID
322 | 1C9437FD063B20B00039CFAC
323 | PBXProjectModuleLabel
324 | Files
325 | PBXProjectStructureProvided
326 | yes
327 | PBXSmartGroupTreeModuleColumnData
328 |
329 | PBXSmartGroupTreeModuleColumnWidthsKey
330 |
331 | 323
332 | 20
333 | 43
334 | 43
335 |
336 | PBXSmartGroupTreeModuleColumnsKey_v4
337 |
338 | MainColumn
339 | FileBuiltColumn
340 | ErrorsColumn
341 | WarningsColumn
342 |
343 |
344 | PBXSmartGroupTreeModuleOutlineStateKey_v7
345 |
346 | PBXSmartGroupTreeModuleOutlineStateExpansionKey
347 |
348 | 0867D691FE84028FC02AAC07
349 | 08FB77AEFE84172EC02AAC07
350 | 32C88DFF0371C24200C91783
351 |
352 | PBXSmartGroupTreeModuleOutlineStateSelectionKey
353 |
354 |
355 | 7
356 | 1
357 | 0
358 |
359 |
360 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey
361 | {{0, 0}, {429, 333}}
362 |
363 | PBXTopSmartGroupGIDs
364 |
365 | XCIncludePerspectivesSwitch
366 |
367 |
368 | GeometryConfiguration
369 |
370 | Frame
371 | {{10, 27}, {446, 351}}
372 | GroupTreeTableConfiguration
373 |
374 | MainColumn
375 | 323
376 | FileBuiltColumn
377 | 20
378 | ErrorsColumn
379 | 43
380 | WarningsColumn
381 | 43
382 |
383 | RubberWindowFrame
384 | 1416 713 446 419 0 0 1920 1178
385 |
386 | Module
387 | PBXSmartGroupTreeModule
388 |
389 |
390 | ContentConfiguration
391 |
392 | PBXBottomSmartGroupGIDs
393 |
394 | 1C37FBAC04509CD000000102
395 | 1C37FAAC04509CD000000102
396 |
397 | PBXProjectModuleGUID
398 | 1C9437FE063B20B00039CFAC
399 | PBXProjectModuleLabel
400 | Targets
401 | PBXProjectStructureProvided
402 | no
403 | PBXSmartGroupTreeModuleColumnData
404 |
405 | PBXSmartGroupTreeModuleColumnWidthsKey
406 |
407 | 429
408 |
409 | PBXSmartGroupTreeModuleColumnsKey_v4
410 |
411 | MainColumn
412 |
413 |
414 | PBXSmartGroupTreeModuleOutlineStateKey_v7
415 |
416 | PBXSmartGroupTreeModuleOutlineStateExpansionKey
417 |
418 | 1C37FBAC04509CD000000102
419 | 82A53D8C11ED1E0D006BA92A
420 | 82A53D8D11ED1E0D006BA92A
421 | 82A53D8E11ED1E0D006BA92A
422 | 82A53D8F11ED1E0D006BA92A
423 |
424 | PBXSmartGroupTreeModuleOutlineStateSelectionKey
425 |
426 |
427 | 7
428 | 4
429 | 1
430 | 0
431 |
432 |
433 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey
434 | {{0, 0}, {429, 333}}
435 |
436 | PBXTopSmartGroupGIDs
437 |
438 | XCIncludePerspectivesSwitch
439 |
440 |
441 | GeometryConfiguration
442 |
443 | Frame
444 | {{10, 27}, {446, 351}}
445 | GroupTreeTableConfiguration
446 |
447 | MainColumn
448 | 429
449 |
450 |
451 | Module
452 | PBXSmartGroupTreeModule
453 |
454 |
455 | ContentConfiguration
456 |
457 | PBXBottomSmartGroupGIDs
458 |
459 | 1C37FABC05509CD000000102
460 | 1C37FABC05539CD112110102
461 | E2644B35053B69B200211256
462 | 1C37FABC04509CD000100104
463 | 1CC0EA4004350EF90044410B
464 | 1CC0EA4004350EF90041110B
465 |
466 | PBXProjectModuleGUID
467 | 1C9437FF063B20B00039CFAC
468 | PBXProjectModuleLabel
469 | Other
470 | PBXProjectStructureProvided
471 | no
472 | PBXSmartGroupTreeModuleColumnData
473 |
474 | PBXSmartGroupTreeModuleColumnWidthsKey
475 |
476 | 555
477 |
478 | PBXSmartGroupTreeModuleColumnsKey_v4
479 |
480 | MainColumn
481 |
482 |
483 | PBXSmartGroupTreeModuleOutlineStateKey_v7
484 |
485 | PBXSmartGroupTreeModuleOutlineStateExpansionKey
486 |
487 | PBXSmartGroupTreeModuleOutlineStateSelectionKey
488 |
489 |
490 | 0
491 |
492 |
493 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey
494 | {{0, 0}, {555, 301}}
495 |
496 | PBXTopSmartGroupGIDs
497 |
498 | XCIncludePerspectivesSwitch
499 |
500 |
501 | GeometryConfiguration
502 |
503 | Frame
504 | {{0, 0}, {572, 319}}
505 | GroupTreeTableConfiguration
506 |
507 | MainColumn
508 | 555
509 |
510 |
511 | Module
512 | PBXSmartGroupTreeModule
513 |
514 |
515 |
516 |
517 | Name
518 | Project
519 | ServiceClasses
520 |
521 | XCModuleDock
522 | XCDockableTabModule
523 | PBXSmartGroupTreeModule
524 | PBXSmartGroupTreeModule
525 | PBXSmartGroupTreeModule
526 |
527 | TableOfContents
528 |
529 | 82A53B9311EC8D7E006BA92A
530 | 82A53B9411EC8D7E006BA92A
531 | 1C9437FD063B20B00039CFAC
532 | 1C9437FE063B20B00039CFAC
533 | 1C9437FF063B20B00039CFAC
534 |
535 | ToolbarConfigUserDefaultsMinorVersion
536 | 2
537 | ToolbarConfiguration
538 | xcode.toolbar.config.default.shortV3
539 |
540 |
541 | PerspectivesBarVisible
542 |
543 | ShelfIsVisible
544 |
545 | SourceDescription
546 | file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode2.xcperspec'
547 | StatusbarIsVisible
548 |
549 | TimeStamp
550 | 0.0
551 | ToolbarConfigUserDefaultsMinorVersion
552 | 2
553 | ToolbarDisplayMode
554 | 2
555 | ToolbarIsVisible
556 |
557 | ToolbarSizeMode
558 | 1
559 | Type
560 | Perspectives
561 | UpdateMessage
562 |
563 | WindowJustification
564 | 0
565 | WindowOrderList
566 |
567 | 827E468111EB0E0600684466
568 | 82A53B9C11EC8D7E006BA92A
569 | 82A53B9D11EC8D7E006BA92A
570 | 1C530D5B069F1CE1000CFCEE
571 | 1C530D54069F1CE1000CFCEE
572 | 1C530D52069F1CE1000CFCEE
573 | /Users/igorsutton/Documents/Code/TumblrKit/TumblrKit.xcodeproj
574 | 82A53D9811ED1E4B006BA92A
575 | 82A53D9011ED1E0D006BA92A
576 |
577 | WindowString
578 | 1416 713 446 419 0 0 1920 1178
579 | WindowToolsV3
580 |
581 |
582 | Identifier
583 | windowTool.detail
584 | IsVertical
585 | 0
586 | Layout
587 |
588 |
589 | Dock
590 |
591 |
592 | BecomeActive
593 | 1
594 | ContentConfiguration
595 |
596 | PBXBottomSmartGroupGIDs
597 |
598 | 1C37FBAC04509CD000000102
599 | 1C37FAAC04509CD000000102
600 | 1C08E77C0454961000C914BD
601 | 1C37FABC05509CD000000102
602 | 1C37FABC05539CD112110102
603 | E2644B35053B69B200211256
604 | 1C37FABC04509CD000100104
605 | 1CC0EA4004350EF90044410B
606 | 1CC0EA4004350EF90041110B
607 |
608 | PBXProjectModuleGUID
609 | 1CE0B1FE06471DED0097A5F4
610 | PBXProjectModuleLabel
611 | Files
612 | PBXProjectStructureProvided
613 | yes
614 | PBXSmartGroupTreeModuleColumnData
615 |
616 | PBXSmartGroupTreeModuleColumnWidthsKey
617 |
618 | 245
619 |
620 | PBXSmartGroupTreeModuleColumnsKey_v4
621 |
622 | MainColumn
623 |
624 |
625 | PBXSmartGroupTreeModuleOutlineStateKey_v7
626 |
627 | PBXSmartGroupTreeModuleOutlineStateExpansionKey
628 |
629 | 00C654E9FEEE28EC7F000001
630 | 1C37FABC05509CD000000102
631 |
632 | PBXSmartGroupTreeModuleOutlineStateSelectionKey
633 |
634 |
635 | 0
636 |
637 |
638 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey
639 | {{0, 0}, {245, 350}}
640 |
641 | PBXTopSmartGroupGIDs
642 |
643 | XCIncludePerspectivesSwitch
644 | 0
645 |
646 | GeometryConfiguration
647 |
648 | Frame
649 | {{0, 0}, {262, 368}}
650 | GroupTreeTableConfiguration
651 |
652 | MainColumn
653 | 245
654 |
655 | RubberWindowFrame
656 | 31 446 744 409 0 0 1440 878
657 |
658 | Module
659 | PBXSmartGroupTreeModule
660 | Proportion
661 | 262pt
662 |
663 |
664 | ContentConfiguration
665 |
666 | PBXProjectModuleGUID
667 | 1CA1AED706398EBD00589147
668 | PBXProjectModuleLabel
669 | Detail
670 |
671 | GeometryConfiguration
672 |
673 | Frame
674 | {{267, 0}, {477, 368}}
675 | RubberWindowFrame
676 | 31 446 744 409 0 0 1440 878
677 |
678 | Module
679 | XCDetailModule
680 | Proportion
681 | 477pt
682 |
683 |
684 | Proportion
685 | 100%
686 |
687 |
688 | Name
689 | Detail
690 | ServiceClasses
691 |
692 | PBXSmartGroupTreeModule
693 | XCDetailModule
694 |
695 | StatusbarIsVisible
696 | 1
697 | TableOfContents
698 |
699 | 1C335F2C07B51CD20023D4EE
700 | 1C335F2D07B51CD20023D4EE
701 | 1C335F2E07B51CD20023D4EE
702 | 1CE0B1FE06471DED0097A5F4
703 | 1CA1AED706398EBD00589147
704 |
705 | ToolbarConfiguration
706 | xcode.toolbar.config.defaultV3
707 | WindowString
708 | 31 446 744 409 0 0 1440 878
709 | WindowToolGUID
710 | 1C335F2C07B51CD20023D4EE
711 | WindowToolIsVisible
712 | 1
713 |
714 |
715 | Identifier
716 | MENUSEPARATOR
717 |
718 |
719 | FirstTimeWindowDisplayed
720 |
721 | Identifier
722 | windowTool.build
723 | IsVertical
724 |
725 | Layout
726 |
727 |
728 | Dock
729 |
730 |
731 | BecomeActive
732 |
733 | ContentConfiguration
734 |
735 | PBXProjectModuleGUID
736 | 1CD0528F0623707200166675
737 | PBXProjectModuleLabel
738 | Test.m
739 | StatusBarVisibility
740 |
741 |
742 | GeometryConfiguration
743 |
744 | Frame
745 | {{0, 0}, {1920, 836}}
746 | RubberWindowFrame
747 | 0 60 1920 1118 0 0 1920 1178
748 |
749 | Module
750 | PBXNavigatorGroup
751 | Proportion
752 | 836pt
753 |
754 |
755 | ContentConfiguration
756 |
757 | PBXProjectModuleGUID
758 | XCMainBuildResultsModuleGUID
759 | PBXProjectModuleLabel
760 | Build Results
761 | XCBuildResultsTrigger_Collapse
762 | 1021
763 | XCBuildResultsTrigger_Open
764 | 1011
765 |
766 | GeometryConfiguration
767 |
768 | Frame
769 | {{0, 841}, {1920, 236}}
770 | RubberWindowFrame
771 | 0 60 1920 1118 0 0 1920 1178
772 |
773 | Module
774 | PBXBuildResultsModule
775 | Proportion
776 | 236pt
777 |
778 |
779 | Proportion
780 | 1077pt
781 |
782 |
783 | Name
784 | Build Results
785 | ServiceClasses
786 |
787 | PBXBuildResultsModule
788 |
789 | StatusbarIsVisible
790 |
791 | TableOfContents
792 |
793 | 1C530D52069F1CE1000CFCEE
794 | 82A53B8A11EC8D79006BA92A
795 | 1CD0528F0623707200166675
796 | XCMainBuildResultsModuleGUID
797 |
798 | ToolbarConfiguration
799 | xcode.toolbar.config.buildV3
800 | WindowContentMinSize
801 | 486 300
802 | WindowString
803 | 0 60 1920 1118 0 0 1920 1178
804 | WindowToolGUID
805 | 1C530D52069F1CE1000CFCEE
806 | WindowToolIsVisible
807 |
808 |
809 |
810 | FirstTimeWindowDisplayed
811 |
812 | Identifier
813 | windowTool.debugger
814 | IsVertical
815 |
816 | Layout
817 |
818 |
819 | Dock
820 |
821 |
822 | ContentConfiguration
823 |
824 | Debugger
825 |
826 | HorizontalSplitView
827 |
828 | _collapsingFrameDimension
829 | 0.0
830 | _indexOfCollapsedView
831 | 0
832 | _percentageOfCollapsedView
833 | 0.0
834 | isCollapsed
835 | yes
836 | sizes
837 |
838 | {{0, 0}, {714, 461}}
839 | {{0, 461}, {714, 461}}
840 |
841 |
842 | VerticalSplitView
843 |
844 | _collapsingFrameDimension
845 | 0.0
846 | _indexOfCollapsedView
847 | 0
848 | _percentageOfCollapsedView
849 | 0.0
850 | isCollapsed
851 | yes
852 | sizes
853 |
854 | {{0, 0}, {714, 922}}
855 | {{714, 0}, {713, 922}}
856 |
857 |
858 |
859 | LauncherConfigVersion
860 | 8
861 | PBXProjectModuleGUID
862 | 1C162984064C10D400B95A72
863 | PBXProjectModuleLabel
864 | Debug - GLUTExamples (Underwater)
865 |
866 | GeometryConfiguration
867 |
868 | DebugConsoleVisible
869 | None
870 | DebugConsoleWindowFrame
871 | {{200, 200}, {500, 300}}
872 | DebugSTDIOWindowFrame
873 | {{200, 200}, {500, 300}}
874 | Frame
875 | {{0, 0}, {1427, 922}}
876 | PBXDebugSessionStackFrameViewKey
877 |
878 | DebugVariablesTableConfiguration
879 |
880 | Name
881 | 120
882 | Value
883 | 85
884 | Summary
885 | 484
886 |
887 | Frame
888 | {{0, 461}, {714, 461}}
889 | RubberWindowFrame
890 | 33 180 1427 963 0 0 1920 1178
891 |
892 | RubberWindowFrame
893 | 33 180 1427 963 0 0 1920 1178
894 |
895 | Module
896 | PBXDebugSessionModule
897 | Proportion
898 | 922pt
899 |
900 |
901 | Proportion
902 | 922pt
903 |
904 |
905 | Name
906 | Debugger
907 | ServiceClasses
908 |
909 | PBXDebugSessionModule
910 |
911 | StatusbarIsVisible
912 |
913 | TableOfContents
914 |
915 | 1C530D54069F1CE1000CFCEE
916 | 82A53B8B11EC8D79006BA92A
917 | 1C162984064C10D400B95A72
918 | 82A53B8C11EC8D79006BA92A
919 | 82A53B8D11EC8D79006BA92A
920 | 82A53B8E11EC8D79006BA92A
921 | 82A53B8F11EC8D79006BA92A
922 | 82A53B9011EC8D79006BA92A
923 |
924 | ToolbarConfiguration
925 | xcode.toolbar.config.debugV3
926 | WindowString
927 | 33 180 1427 963 0 0 1920 1178
928 | WindowToolGUID
929 | 1C530D54069F1CE1000CFCEE
930 | WindowToolIsVisible
931 |
932 |
933 |
934 | Identifier
935 | windowTool.find
936 | Layout
937 |
938 |
939 | Dock
940 |
941 |
942 | Dock
943 |
944 |
945 | ContentConfiguration
946 |
947 | PBXProjectModuleGUID
948 | 1CDD528C0622207200134675
949 | PBXProjectModuleLabel
950 | <No Editor>
951 | PBXSplitModuleInNavigatorKey
952 |
953 | Split0
954 |
955 | PBXProjectModuleGUID
956 | 1CD0528D0623707200166675
957 |
958 | SplitCount
959 | 1
960 |
961 | StatusBarVisibility
962 | 1
963 |
964 | GeometryConfiguration
965 |
966 | Frame
967 | {{0, 0}, {781, 167}}
968 | RubberWindowFrame
969 | 62 385 781 470 0 0 1440 878
970 |
971 | Module
972 | PBXNavigatorGroup
973 | Proportion
974 | 781pt
975 |
976 |
977 | Proportion
978 | 50%
979 |
980 |
981 | BecomeActive
982 | 1
983 | ContentConfiguration
984 |
985 | PBXProjectModuleGUID
986 | 1CD0528E0623707200166675
987 | PBXProjectModuleLabel
988 | Project Find
989 |
990 | GeometryConfiguration
991 |
992 | Frame
993 | {{8, 0}, {773, 254}}
994 | RubberWindowFrame
995 | 62 385 781 470 0 0 1440 878
996 |
997 | Module
998 | PBXProjectFindModule
999 | Proportion
1000 | 50%
1001 |
1002 |
1003 | Proportion
1004 | 428pt
1005 |
1006 |
1007 | Name
1008 | Project Find
1009 | ServiceClasses
1010 |
1011 | PBXProjectFindModule
1012 |
1013 | StatusbarIsVisible
1014 | 1
1015 | TableOfContents
1016 |
1017 | 1C530D57069F1CE1000CFCEE
1018 | 1C530D58069F1CE1000CFCEE
1019 | 1C530D59069F1CE1000CFCEE
1020 | 1CDD528C0622207200134675
1021 | 1C530D5A069F1CE1000CFCEE
1022 | 1CE0B1FE06471DED0097A5F4
1023 | 1CD0528E0623707200166675
1024 |
1025 | WindowString
1026 | 62 385 781 470 0 0 1440 878
1027 | WindowToolGUID
1028 | 1C530D57069F1CE1000CFCEE
1029 | WindowToolIsVisible
1030 | 0
1031 |
1032 |
1033 | Identifier
1034 | MENUSEPARATOR
1035 |
1036 |
1037 | FirstTimeWindowDisplayed
1038 |
1039 | Identifier
1040 | windowTool.debuggerConsole
1041 | IsVertical
1042 |
1043 | Layout
1044 |
1045 |
1046 | Dock
1047 |
1048 |
1049 | BecomeActive
1050 |
1051 | ContentConfiguration
1052 |
1053 | PBXProjectModuleGUID
1054 | 1C78EAAC065D492600B07095
1055 | PBXProjectModuleLabel
1056 | Debugger Console
1057 |
1058 | GeometryConfiguration
1059 |
1060 | Frame
1061 | {{0, 0}, {1529, 673}}
1062 | RubberWindowFrame
1063 | 33 429 1529 714 0 0 1920 1178
1064 |
1065 | Module
1066 | PBXDebugCLIModule
1067 | Proportion
1068 | 673pt
1069 |
1070 |
1071 | Proportion
1072 | 673pt
1073 |
1074 |
1075 | Name
1076 | Debugger Console
1077 | ServiceClasses
1078 |
1079 | PBXDebugCLIModule
1080 |
1081 | StatusbarIsVisible
1082 |
1083 | TableOfContents
1084 |
1085 | 1C530D5B069F1CE1000CFCEE
1086 | 82A53B9111EC8D79006BA92A
1087 | 1C78EAAC065D492600B07095
1088 |
1089 | ToolbarConfiguration
1090 | xcode.toolbar.config.consoleV3
1091 | WindowString
1092 | 33 429 1529 714 0 0 1920 1178
1093 | WindowToolGUID
1094 | 1C530D5B069F1CE1000CFCEE
1095 | WindowToolIsVisible
1096 |
1097 |
1098 |
1099 | Identifier
1100 | windowTool.snapshots
1101 | Layout
1102 |
1103 |
1104 | Dock
1105 |
1106 |
1107 | Module
1108 | XCSnapshotModule
1109 | Proportion
1110 | 100%
1111 |
1112 |
1113 | Proportion
1114 | 100%
1115 |
1116 |
1117 | Name
1118 | Snapshots
1119 | ServiceClasses
1120 |
1121 | XCSnapshotModule
1122 |
1123 | StatusbarIsVisible
1124 | Yes
1125 | ToolbarConfiguration
1126 | xcode.toolbar.config.snapshots
1127 | WindowString
1128 | 315 824 300 550 0 0 1440 878
1129 | WindowToolIsVisible
1130 | Yes
1131 |
1132 |
1133 | Identifier
1134 | windowTool.scm
1135 | Layout
1136 |
1137 |
1138 | Dock
1139 |
1140 |
1141 | ContentConfiguration
1142 |
1143 | PBXProjectModuleGUID
1144 | 1C78EAB2065D492600B07095
1145 | PBXProjectModuleLabel
1146 | <No Editor>
1147 | PBXSplitModuleInNavigatorKey
1148 |
1149 | Split0
1150 |
1151 | PBXProjectModuleGUID
1152 | 1C78EAB3065D492600B07095
1153 |
1154 | SplitCount
1155 | 1
1156 |
1157 | StatusBarVisibility
1158 | 1
1159 |
1160 | GeometryConfiguration
1161 |
1162 | Frame
1163 | {{0, 0}, {452, 0}}
1164 | RubberWindowFrame
1165 | 743 379 452 308 0 0 1280 1002
1166 |
1167 | Module
1168 | PBXNavigatorGroup
1169 | Proportion
1170 | 0pt
1171 |
1172 |
1173 | BecomeActive
1174 | 1
1175 | ContentConfiguration
1176 |
1177 | PBXProjectModuleGUID
1178 | 1CD052920623707200166675
1179 | PBXProjectModuleLabel
1180 | SCM
1181 |
1182 | GeometryConfiguration
1183 |
1184 | ConsoleFrame
1185 | {{0, 259}, {452, 0}}
1186 | Frame
1187 | {{0, 7}, {452, 259}}
1188 | RubberWindowFrame
1189 | 743 379 452 308 0 0 1280 1002
1190 | TableConfiguration
1191 |
1192 | Status
1193 | 30
1194 | FileName
1195 | 199
1196 | Path
1197 | 197.09500122070312
1198 |
1199 | TableFrame
1200 | {{0, 0}, {452, 250}}
1201 |
1202 | Module
1203 | PBXCVSModule
1204 | Proportion
1205 | 262pt
1206 |
1207 |
1208 | Proportion
1209 | 266pt
1210 |
1211 |
1212 | Name
1213 | SCM
1214 | ServiceClasses
1215 |
1216 | PBXCVSModule
1217 |
1218 | StatusbarIsVisible
1219 | 1
1220 | TableOfContents
1221 |
1222 | 1C78EAB4065D492600B07095
1223 | 1C78EAB5065D492600B07095
1224 | 1C78EAB2065D492600B07095
1225 | 1CD052920623707200166675
1226 |
1227 | ToolbarConfiguration
1228 | xcode.toolbar.config.scm
1229 | WindowString
1230 | 743 379 452 308 0 0 1280 1002
1231 |
1232 |
1233 | Identifier
1234 | windowTool.breakpoints
1235 | IsVertical
1236 | 0
1237 | Layout
1238 |
1239 |
1240 | Dock
1241 |
1242 |
1243 | BecomeActive
1244 | 1
1245 | ContentConfiguration
1246 |
1247 | PBXBottomSmartGroupGIDs
1248 |
1249 | 1C77FABC04509CD000000102
1250 |
1251 | PBXProjectModuleGUID
1252 | 1CE0B1FE06471DED0097A5F4
1253 | PBXProjectModuleLabel
1254 | Files
1255 | PBXProjectStructureProvided
1256 | no
1257 | PBXSmartGroupTreeModuleColumnData
1258 |
1259 | PBXSmartGroupTreeModuleColumnWidthsKey
1260 |
1261 | 168
1262 |
1263 | PBXSmartGroupTreeModuleColumnsKey_v4
1264 |
1265 | MainColumn
1266 |
1267 |
1268 | PBXSmartGroupTreeModuleOutlineStateKey_v7
1269 |
1270 | PBXSmartGroupTreeModuleOutlineStateExpansionKey
1271 |
1272 | 1C77FABC04509CD000000102
1273 |
1274 | PBXSmartGroupTreeModuleOutlineStateSelectionKey
1275 |
1276 |
1277 | 0
1278 |
1279 |
1280 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey
1281 | {{0, 0}, {168, 350}}
1282 |
1283 | PBXTopSmartGroupGIDs
1284 |
1285 | XCIncludePerspectivesSwitch
1286 | 0
1287 |
1288 | GeometryConfiguration
1289 |
1290 | Frame
1291 | {{0, 0}, {185, 368}}
1292 | GroupTreeTableConfiguration
1293 |
1294 | MainColumn
1295 | 168
1296 |
1297 | RubberWindowFrame
1298 | 315 424 744 409 0 0 1440 878
1299 |
1300 | Module
1301 | PBXSmartGroupTreeModule
1302 | Proportion
1303 | 185pt
1304 |
1305 |
1306 | ContentConfiguration
1307 |
1308 | PBXProjectModuleGUID
1309 | 1CA1AED706398EBD00589147
1310 | PBXProjectModuleLabel
1311 | Detail
1312 |
1313 | GeometryConfiguration
1314 |
1315 | Frame
1316 | {{190, 0}, {554, 368}}
1317 | RubberWindowFrame
1318 | 315 424 744 409 0 0 1440 878
1319 |
1320 | Module
1321 | XCDetailModule
1322 | Proportion
1323 | 554pt
1324 |
1325 |
1326 | Proportion
1327 | 368pt
1328 |
1329 |
1330 | MajorVersion
1331 | 3
1332 | MinorVersion
1333 | 0
1334 | Name
1335 | Breakpoints
1336 | ServiceClasses
1337 |
1338 | PBXSmartGroupTreeModule
1339 | XCDetailModule
1340 |
1341 | StatusbarIsVisible
1342 | 1
1343 | TableOfContents
1344 |
1345 | 1CDDB66807F98D9800BB5817
1346 | 1CDDB66907F98D9800BB5817
1347 | 1CE0B1FE06471DED0097A5F4
1348 | 1CA1AED706398EBD00589147
1349 |
1350 | ToolbarConfiguration
1351 | xcode.toolbar.config.breakpointsV3
1352 | WindowString
1353 | 315 424 744 409 0 0 1440 878
1354 | WindowToolGUID
1355 | 1CDDB66807F98D9800BB5817
1356 | WindowToolIsVisible
1357 | 1
1358 |
1359 |
1360 | Identifier
1361 | windowTool.debugAnimator
1362 | Layout
1363 |
1364 |
1365 | Dock
1366 |
1367 |
1368 | Module
1369 | PBXNavigatorGroup
1370 | Proportion
1371 | 100%
1372 |
1373 |
1374 | Proportion
1375 | 100%
1376 |
1377 |
1378 | Name
1379 | Debug Visualizer
1380 | ServiceClasses
1381 |
1382 | PBXNavigatorGroup
1383 |
1384 | StatusbarIsVisible
1385 | 1
1386 | ToolbarConfiguration
1387 | xcode.toolbar.config.debugAnimatorV3
1388 | WindowString
1389 | 100 100 700 500 0 0 1280 1002
1390 |
1391 |
1392 | Identifier
1393 | windowTool.bookmarks
1394 | Layout
1395 |
1396 |
1397 | Dock
1398 |
1399 |
1400 | Module
1401 | PBXBookmarksModule
1402 | Proportion
1403 | 100%
1404 |
1405 |
1406 | Proportion
1407 | 100%
1408 |
1409 |
1410 | Name
1411 | Bookmarks
1412 | ServiceClasses
1413 |
1414 | PBXBookmarksModule
1415 |
1416 | StatusbarIsVisible
1417 | 0
1418 | WindowString
1419 | 538 42 401 187 0 0 1280 1002
1420 |
1421 |
1422 | Identifier
1423 | windowTool.projectFormatConflicts
1424 | Layout
1425 |
1426 |
1427 | Dock
1428 |
1429 |
1430 | Module
1431 | XCProjectFormatConflictsModule
1432 | Proportion
1433 | 100%
1434 |
1435 |
1436 | Proportion
1437 | 100%
1438 |
1439 |
1440 | Name
1441 | Project Format Conflicts
1442 | ServiceClasses
1443 |
1444 | XCProjectFormatConflictsModule
1445 |
1446 | StatusbarIsVisible
1447 | 0
1448 | WindowContentMinSize
1449 | 450 300
1450 | WindowString
1451 | 50 850 472 307 0 0 1440 877
1452 |
1453 |
1454 | Identifier
1455 | windowTool.classBrowser
1456 | Layout
1457 |
1458 |
1459 | Dock
1460 |
1461 |
1462 | BecomeActive
1463 | 1
1464 | ContentConfiguration
1465 |
1466 | OptionsSetName
1467 | Hierarchy, all classes
1468 | PBXProjectModuleGUID
1469 | 1CA6456E063B45B4001379D8
1470 | PBXProjectModuleLabel
1471 | Class Browser - NSObject
1472 |
1473 | GeometryConfiguration
1474 |
1475 | ClassesFrame
1476 | {{0, 0}, {368, 96}}
1477 | ClassesTreeTableConfiguration
1478 |
1479 | PBXClassNameColumnIdentifier
1480 | 208
1481 | PBXClassBookColumnIdentifier
1482 | 22
1483 |
1484 | Frame
1485 | {{0, 0}, {624, 318}}
1486 | MembersFrame
1487 | {{0, 105}, {368, 395}}
1488 | MembersTreeTableConfiguration
1489 |
1490 | PBXMemberTypeIconColumnIdentifier
1491 | 22
1492 | PBXMemberNameColumnIdentifier
1493 | 216
1494 | PBXMemberTypeColumnIdentifier
1495 | 91
1496 | PBXMemberBookColumnIdentifier
1497 | 22
1498 |
1499 | PBXModuleWindowStatusBarHidden2
1500 | 1
1501 | RubberWindowFrame
1502 | 128 171 624 339 0 0 1440 878
1503 |
1504 | Module
1505 | PBXClassBrowserModule
1506 | Proportion
1507 | 319pt
1508 |
1509 |
1510 | Proportion
1511 | 319pt
1512 |
1513 |
1514 | Name
1515 | Class Browser
1516 | ServiceClasses
1517 |
1518 | PBXClassBrowserModule
1519 |
1520 | StatusbarIsVisible
1521 | 0
1522 | TableOfContents
1523 |
1524 | 1C530D60069F1CE1000CFCEE
1525 | 1C530D61069F1CE1000CFCEE
1526 | 1CA6456E063B45B4001379D8
1527 |
1528 | ToolbarConfiguration
1529 | xcode.toolbar.config.classbrowser
1530 | WindowString
1531 | 128 171 624 339 0 0 1440 878
1532 | WindowToolGUID
1533 | 1C530D60069F1CE1000CFCEE
1534 | WindowToolIsVisible
1535 | 0
1536 |
1537 |
1538 | FirstTimeWindowDisplayed
1539 |
1540 | Identifier
1541 | windowTool.refactoring
1542 | IncludeInToolsMenu
1543 | 0
1544 | IsVertical
1545 |
1546 | Layout
1547 |
1548 |
1549 | Dock
1550 |
1551 |
1552 | ContentConfiguration
1553 |
1554 | PBXProjectModuleGUID
1555 | 827E468011EB0E0600684466
1556 |
1557 | GeometryConfiguration
1558 |
1559 | Frame
1560 | {{0, 0}, {1039, 689}}
1561 | RubberWindowFrame
1562 | 59 399 1039 730 0 0 1920 1178
1563 | XCRefactoringSplitViewLowerHeight
1564 | 300
1565 | XCRefactoringSplitViewTotalHeight
1566 | 606
1567 |
1568 | Module
1569 | XCRefactoringModule
1570 | Proportion
1571 | 689pt
1572 |
1573 |
1574 | Proportion
1575 | 689pt
1576 |
1577 |
1578 | Name
1579 | Refactoring
1580 | ServiceClasses
1581 |
1582 | XCRefactoringModule
1583 |
1584 | StatusbarIsVisible
1585 |
1586 | TableOfContents
1587 |
1588 | 827E468111EB0E0600684466
1589 | 82A53B9211EC8D79006BA92A
1590 | 827E468011EB0E0600684466
1591 |
1592 | WindowString
1593 | 59 399 1039 730 0 0 1920 1178
1594 | WindowToolGUID
1595 | 827E468111EB0E0600684466
1596 | WindowToolIsVisible
1597 |
1598 |
1599 |
1600 |
1601 |
1602 |
--------------------------------------------------------------------------------
/TumblrKit.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXAggregateTarget section */
10 | 82B09E70123543700006D003 /* Documentation */ = {
11 | isa = PBXAggregateTarget;
12 | buildConfigurationList = 82B09E781235438A0006D003 /* Build configuration list for PBXAggregateTarget "Documentation" */;
13 | buildPhases = (
14 | 82B09E6F123543700006D003 /* ShellScript */,
15 | );
16 | dependencies = (
17 | );
18 | name = Documentation;
19 | productName = Documentation;
20 | };
21 | /* End PBXAggregateTarget section */
22 |
23 | /* Begin PBXBuildFile section */
24 | 8231532B1577816900D73D75 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 82F79916149924E900920028 /* SenTestingKit.framework */; };
25 | 8231532D1577816900D73D75 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8231532C1577816900D73D75 /* UIKit.framework */; };
26 | 8231532E1577816900D73D75 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 827902D614979B0C0018F19E /* Foundation.framework */; };
27 | 823153341577816900D73D75 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 823153321577816900D73D75 /* InfoPlist.strings */; };
28 | 823153371577816900D73D75 /* TumblrKit_Tests_for_iOS.m in Sources */ = {isa = PBXBuildFile; fileRef = 823153361577816900D73D75 /* TumblrKit_Tests_for_iOS.m */; };
29 | 823153461577854000D73D75 /* libTumblrKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8279032A1497E53E0018F19E /* libTumblrKit.a */; };
30 | 8279032B1497E53E0018F19E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 827902D614979B0C0018F19E /* Foundation.framework */; };
31 | 827903311497E53E0018F19E /* TumblrKit_for_iOS.m in Sources */ = {isa = PBXBuildFile; fileRef = 827903301497E53E0018F19E /* TumblrKit_for_iOS.m */; };
32 | 8279034F1497E5860018F19E /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 827902FF1497E4600018F19E /* Cocoa.framework */; };
33 | 827903551497E5860018F19E /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 827903531497E5860018F19E /* InfoPlist.strings */; };
34 | 827903591497E5860018F19E /* TumblrKit_for_Mac.m in Sources */ = {isa = PBXBuildFile; fileRef = 827903581497E5860018F19E /* TumblrKit_for_Mac.m */; };
35 | 82F798F31497E78A00920028 /* NSDictionary+TumblrKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 82B09F41123664CD0006D003 /* NSDictionary+TumblrKit.m */; };
36 | 82F798F41497E78A00920028 /* NSString+TumblrKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 826CD95D11EDDAD600F5CB24 /* NSString+TumblrKit.m */; };
37 | 82F798F51497E78A00920028 /* TKPost.m in Sources */ = {isa = PBXBuildFile; fileRef = 827E467711EB0D9100684466 /* TKPost.m */; };
38 | 82F798F61497E78A00920028 /* TKTumblr.m in Sources */ = {isa = PBXBuildFile; fileRef = 82B09EAF123643A70006D003 /* TKTumblr.m */; };
39 | 82F798F71497E78A00920028 /* TKTumblrReadRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 82B0A018123675EF0006D003 /* TKTumblrReadRequest.m */; };
40 | 82F798F81497E78A00920028 /* TKTumblelog.m in Sources */ = {isa = PBXBuildFile; fileRef = 821DE1CE1237D09300B6A45D /* TKTumblelog.m */; };
41 | 82F798FA1497E7A400920028 /* NSDictionary+TumblrKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 82B09F41123664CD0006D003 /* NSDictionary+TumblrKit.m */; };
42 | 82F798FB1497E7A400920028 /* NSString+TumblrKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 826CD95D11EDDAD600F5CB24 /* NSString+TumblrKit.m */; };
43 | 82F798FC1497E7A400920028 /* TKPost.m in Sources */ = {isa = PBXBuildFile; fileRef = 827E467711EB0D9100684466 /* TKPost.m */; };
44 | 82F798FD1497E7A400920028 /* TKTumblr.m in Sources */ = {isa = PBXBuildFile; fileRef = 82B09EAF123643A70006D003 /* TKTumblr.m */; };
45 | 82F798FE1497E7A400920028 /* TKTumblrReadRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 82B0A018123675EF0006D003 /* TKTumblrReadRequest.m */; };
46 | 82F798FF1497E7A400920028 /* TKTumblelog.m in Sources */ = {isa = PBXBuildFile; fileRef = 821DE1CE1237D09300B6A45D /* TKTumblelog.m */; };
47 | 82F799011497E7E700920028 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 827902F71497E2A90018F19E /* UIKit.framework */; };
48 | 82F799051497ED7A00920028 /* TKRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 82F799031497ED4E00920028 /* TKRequest.m */; };
49 | 82F799081497F27300920028 /* TKPostsRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 82F799061497F27300920028 /* TKPostsRequest.h */; };
50 | 82F799091497F27300920028 /* TKPostsRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 82F799061497F27300920028 /* TKPostsRequest.h */; };
51 | 82F7990A1497F27300920028 /* TKPostsRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 82F799071497F27300920028 /* TKPostsRequest.m */; };
52 | 82F7990B1497F27300920028 /* TKPostsRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 82F799071497F27300920028 /* TKPostsRequest.m */; };
53 | 82F7990F1499244800920028 /* TKRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 82F799031497ED4E00920028 /* TKRequest.m */; };
54 | 82F79917149924E900920028 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 82F79916149924E900920028 /* SenTestingKit.framework */; };
55 | 82F79918149924E900920028 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 827902FF1497E4600018F19E /* Cocoa.framework */; };
56 | 82F7991E149924E900920028 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 82F7991C149924E900920028 /* InfoPlist.strings */; };
57 | 82F79921149924E900920028 /* TumblrKit_Tests_for_Mac.m in Sources */ = {isa = PBXBuildFile; fileRef = 82F79920149924E900920028 /* TumblrKit_Tests_for_Mac.m */; };
58 | 82F799281499266E00920028 /* TumblrKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8279034E1497E5860018F19E /* TumblrKit.framework */; };
59 | 82F7992B14992ED100920028 /* TKPostsResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 82F7992914992ED100920028 /* TKPostsResponse.h */; };
60 | 82F7992C14992ED100920028 /* TKPostsResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 82F7992914992ED100920028 /* TKPostsResponse.h */; };
61 | 82F7992D14992ED100920028 /* TKPostsResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 82F7992A14992ED100920028 /* TKPostsResponse.m */; };
62 | 82F7992E14992ED100920028 /* TKPostsResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 82F7992A14992ED100920028 /* TKPostsResponse.m */; };
63 | 82F79931149A167B00920028 /* TKTumblelogsRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 82F7992F149A167A00920028 /* TKTumblelogsRequest.h */; };
64 | 82F79932149A167B00920028 /* TKTumblelogsRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 82F7992F149A167A00920028 /* TKTumblelogsRequest.h */; };
65 | 82F79933149A167B00920028 /* TKTumblelogsRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 82F79930149A167A00920028 /* TKTumblelogsRequest.m */; };
66 | 82F79934149A167B00920028 /* TKTumblelogsRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 82F79930149A167A00920028 /* TKTumblelogsRequest.m */; };
67 | 82F79937149A19F500920028 /* TKTumblelogsResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 82F79935149A19F500920028 /* TKTumblelogsResponse.h */; };
68 | 82F79938149A19F500920028 /* TKTumblelogsResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 82F79935149A19F500920028 /* TKTumblelogsResponse.h */; };
69 | 82F79939149A19F500920028 /* TKTumblelogsResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 82F79936149A19F500920028 /* TKTumblelogsResponse.m */; };
70 | 82F7993A149A19F500920028 /* TKTumblelogsResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 82F79936149A19F500920028 /* TKTumblelogsResponse.m */; };
71 | 8DC2EF5A0486A6940098B219 /* TKTumblelogsRequestTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DC2EF5A0486A6940098B218 /* TKTumblelogsRequestTests.m */; };
72 | /* End PBXBuildFile section */
73 |
74 | /* Begin PBXContainerItemProxy section */
75 | 823153431577850200D73D75 /* PBXContainerItemProxy */ = {
76 | isa = PBXContainerItemProxy;
77 | containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
78 | proxyType = 1;
79 | remoteGlobalIDString = 827903291497E53E0018F19E;
80 | remoteInfo = "TumblrKit for iOS";
81 | };
82 | 82F79926149924FA00920028 /* PBXContainerItemProxy */ = {
83 | isa = PBXContainerItemProxy;
84 | containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
85 | proxyType = 1;
86 | remoteGlobalIDString = 8279034D1497E5860018F19E;
87 | remoteInfo = "TumblrKit for Mac";
88 | };
89 | /* End PBXContainerItemProxy section */
90 |
91 | /* Begin PBXFileReference section */
92 | 0867D69BFE84028FC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; };
93 | 089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; };
94 | 821384C812DF309700547830 /* MIT-LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "MIT-LICENSE.txt"; sourceTree = ""; };
95 | 821DE1CD1237D09300B6A45D /* TKTumblelog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TKTumblelog.h; sourceTree = ""; };
96 | 821DE1CE1237D09300B6A45D /* TKTumblelog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TKTumblelog.m; sourceTree = ""; };
97 | 8231532A1577816900D73D75 /* TumblrKit Tests for iOS.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "TumblrKit Tests for iOS.octest"; sourceTree = BUILT_PRODUCTS_DIR; };
98 | 8231532C1577816900D73D75 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
99 | 823153311577816900D73D75 /* TumblrKit Tests for iOS-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TumblrKit Tests for iOS-Info.plist"; sourceTree = ""; };
100 | 823153331577816900D73D75 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; };
101 | 823153351577816900D73D75 /* TumblrKit_Tests_for_iOS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TumblrKit_Tests_for_iOS.h; sourceTree = ""; };
102 | 823153361577816900D73D75 /* TumblrKit_Tests_for_iOS.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TumblrKit_Tests_for_iOS.m; sourceTree = ""; };
103 | 823153381577816900D73D75 /* TumblrKit Tests for iOS-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TumblrKit Tests for iOS-Prefix.pch"; sourceTree = ""; };
104 | 826CD95C11EDDAD600F5CB24 /* NSString+TumblrKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+TumblrKit.h"; sourceTree = ""; };
105 | 826CD95D11EDDAD600F5CB24 /* NSString+TumblrKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+TumblrKit.m"; sourceTree = ""; };
106 | 827902D614979B0C0018F19E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
107 | 827902F71497E2A90018F19E /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
108 | 827902FF1497E4600018F19E /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
109 | 827903021497E4600018F19E /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
110 | 827903031497E4600018F19E /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
111 | 827903041497E4600018F19E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
112 | 8279032A1497E53E0018F19E /* libTumblrKit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libTumblrKit.a; sourceTree = BUILT_PRODUCTS_DIR; };
113 | 8279032E1497E53E0018F19E /* TumblrKit for iOS-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TumblrKit for iOS-Prefix.pch"; sourceTree = ""; };
114 | 8279032F1497E53E0018F19E /* TumblrKit_for_iOS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TumblrKit_for_iOS.h; sourceTree = ""; };
115 | 827903301497E53E0018F19E /* TumblrKit_for_iOS.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TumblrKit_for_iOS.m; sourceTree = ""; };
116 | 8279034E1497E5860018F19E /* TumblrKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TumblrKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
117 | 827903521497E5860018F19E /* TumblrKit for Mac-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TumblrKit for Mac-Info.plist"; sourceTree = ""; };
118 | 827903541497E5860018F19E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; };
119 | 827903561497E5860018F19E /* TumblrKit for Mac-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TumblrKit for Mac-Prefix.pch"; sourceTree = ""; };
120 | 827903571497E5860018F19E /* TumblrKit_for_Mac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TumblrKit_for_Mac.h; sourceTree = ""; };
121 | 827903581497E5860018F19E /* TumblrKit_for_Mac.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TumblrKit_for_Mac.m; sourceTree = ""; };
122 | 827E467611EB0D9100684466 /* TKPost.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TKPost.h; sourceTree = ""; };
123 | 827E467711EB0D9100684466 /* TKPost.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TKPost.m; sourceTree = ""; };
124 | 82A53DD011ED938C006BA92A /* TKTumblr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TKTumblr.h; sourceTree = ""; };
125 | 82B09EAF123643A70006D003 /* TKTumblr.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TKTumblr.m; sourceTree = ""; };
126 | 82B09F40123664CD0006D003 /* NSDictionary+TumblrKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+TumblrKit.h"; sourceTree = ""; };
127 | 82B09F41123664CD0006D003 /* NSDictionary+TumblrKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+TumblrKit.m"; sourceTree = ""; };
128 | 82B0A017123675EF0006D003 /* TKTumblrReadRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TKTumblrReadRequest.h; sourceTree = ""; };
129 | 82B0A018123675EF0006D003 /* TKTumblrReadRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TKTumblrReadRequest.m; sourceTree = ""; };
130 | 82B0A044123678940006D003 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; };
131 | 82F799021497ED4E00920028 /* TKRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TKRequest.h; sourceTree = ""; };
132 | 82F799031497ED4E00920028 /* TKRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TKRequest.m; sourceTree = ""; };
133 | 82F799061497F27300920028 /* TKPostsRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TKPostsRequest.h; sourceTree = ""; };
134 | 82F799071497F27300920028 /* TKPostsRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TKPostsRequest.m; sourceTree = ""; };
135 | 82F79915149924E900920028 /* TumblrKit Tests for Mac.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "TumblrKit Tests for Mac.octest"; sourceTree = BUILT_PRODUCTS_DIR; };
136 | 82F79916149924E900920028 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; };
137 | 82F7991B149924E900920028 /* TumblrKit Tests for Mac-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TumblrKit Tests for Mac-Info.plist"; sourceTree = ""; };
138 | 82F7991D149924E900920028 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; };
139 | 82F7991F149924E900920028 /* TumblrKit_Tests_for_Mac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TumblrKit_Tests_for_Mac.h; sourceTree = ""; };
140 | 82F79920149924E900920028 /* TumblrKit_Tests_for_Mac.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TumblrKit_Tests_for_Mac.m; sourceTree = ""; };
141 | 82F79922149924E900920028 /* TumblrKit Tests for Mac-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TumblrKit Tests for Mac-Prefix.pch"; sourceTree = ""; };
142 | 82F7992914992ED100920028 /* TKPostsResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TKPostsResponse.h; sourceTree = ""; };
143 | 82F7992A14992ED100920028 /* TKPostsResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TKPostsResponse.m; sourceTree = ""; };
144 | 82F7992F149A167A00920028 /* TKTumblelogsRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TKTumblelogsRequest.h; sourceTree = ""; };
145 | 82F79930149A167A00920028 /* TKTumblelogsRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TKTumblelogsRequest.m; sourceTree = ""; };
146 | 82F79935149A19F500920028 /* TKTumblelogsResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TKTumblelogsResponse.h; sourceTree = ""; };
147 | 82F79936149A19F500920028 /* TKTumblelogsResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TKTumblelogsResponse.m; sourceTree = ""; };
148 | 8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
149 | 8DC2EF5A0486A6940098B217 /* TKTumblelogsRequestTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TKTumblelogsRequestTests.h; sourceTree = ""; };
150 | 8DC2EF5A0486A6940098B218 /* TKTumblelogsRequestTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TKTumblelogsRequestTests.m; sourceTree = ""; };
151 | /* End PBXFileReference section */
152 |
153 | /* Begin PBXFrameworksBuildPhase section */
154 | 823153261577816900D73D75 /* Frameworks */ = {
155 | isa = PBXFrameworksBuildPhase;
156 | buildActionMask = 2147483647;
157 | files = (
158 | 823153461577854000D73D75 /* libTumblrKit.a in Frameworks */,
159 | 8231532B1577816900D73D75 /* SenTestingKit.framework in Frameworks */,
160 | 8231532D1577816900D73D75 /* UIKit.framework in Frameworks */,
161 | 8231532E1577816900D73D75 /* Foundation.framework in Frameworks */,
162 | );
163 | runOnlyForDeploymentPostprocessing = 0;
164 | };
165 | 827903271497E53E0018F19E /* Frameworks */ = {
166 | isa = PBXFrameworksBuildPhase;
167 | buildActionMask = 2147483647;
168 | files = (
169 | 82F799011497E7E700920028 /* UIKit.framework in Frameworks */,
170 | 8279032B1497E53E0018F19E /* Foundation.framework in Frameworks */,
171 | );
172 | runOnlyForDeploymentPostprocessing = 0;
173 | };
174 | 8279034A1497E5860018F19E /* Frameworks */ = {
175 | isa = PBXFrameworksBuildPhase;
176 | buildActionMask = 2147483647;
177 | files = (
178 | 8279034F1497E5860018F19E /* Cocoa.framework in Frameworks */,
179 | );
180 | runOnlyForDeploymentPostprocessing = 0;
181 | };
182 | 82F79911149924E900920028 /* Frameworks */ = {
183 | isa = PBXFrameworksBuildPhase;
184 | buildActionMask = 2147483647;
185 | files = (
186 | 82F79917149924E900920028 /* SenTestingKit.framework in Frameworks */,
187 | 82F799281499266E00920028 /* TumblrKit.framework in Frameworks */,
188 | 82F79918149924E900920028 /* Cocoa.framework in Frameworks */,
189 | );
190 | runOnlyForDeploymentPostprocessing = 0;
191 | };
192 | /* End PBXFrameworksBuildPhase section */
193 |
194 | /* Begin PBXGroup section */
195 | 034768DFFF38A50411DB9C8B /* Products */ = {
196 | isa = PBXGroup;
197 | children = (
198 | 8279032A1497E53E0018F19E /* libTumblrKit.a */,
199 | 8279034E1497E5860018F19E /* TumblrKit.framework */,
200 | 82F79915149924E900920028 /* TumblrKit Tests for Mac.octest */,
201 | 8231532A1577816900D73D75 /* TumblrKit Tests for iOS.octest */,
202 | );
203 | name = Products;
204 | sourceTree = "";
205 | };
206 | 0867D691FE84028FC02AAC07 /* TumblrKit */ = {
207 | isa = PBXGroup;
208 | children = (
209 | 08FB77AEFE84172EC02AAC07 /* Classes */,
210 | 32C88DFF0371C24200C91783 /* Other Sources */,
211 | 089C1665FE841158C02AAC07 /* Resources */,
212 | 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */,
213 | 8279032C1497E53E0018F19E /* TumblrKit for iOS */,
214 | 827903501497E5860018F19E /* TumblrKit for Mac */,
215 | 82F79919149924E900920028 /* TumblrKit Tests for Mac */,
216 | 8231532F1577816900D73D75 /* TumblrKit Tests for iOS */,
217 | 827902D514979B0C0018F19E /* Frameworks */,
218 | 034768DFFF38A50411DB9C8B /* Products */,
219 | );
220 | name = TumblrKit;
221 | sourceTree = "";
222 | };
223 | 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = {
224 | isa = PBXGroup;
225 | children = (
226 | 1058C7B0FEA5585E11CA2CBB /* Linked Frameworks */,
227 | 1058C7B2FEA5585E11CA2CBB /* Other Frameworks */,
228 | );
229 | name = "External Frameworks and Libraries";
230 | sourceTree = "";
231 | };
232 | 089C1665FE841158C02AAC07 /* Resources */ = {
233 | isa = PBXGroup;
234 | children = (
235 | 8DC2EF5A0486A6940098B216 /* Info.plist */,
236 | 089C1666FE841158C02AAC07 /* InfoPlist.strings */,
237 | 82B0A044123678940006D003 /* README.md */,
238 | 821384C812DF309700547830 /* MIT-LICENSE.txt */,
239 | );
240 | name = Resources;
241 | sourceTree = "";
242 | };
243 | 08FB77AEFE84172EC02AAC07 /* Classes */ = {
244 | isa = PBXGroup;
245 | children = (
246 | 82B0A029123676790006D003 /* TumblrKit Additions */,
247 | 827E467611EB0D9100684466 /* TKPost.h */,
248 | 827E467711EB0D9100684466 /* TKPost.m */,
249 | 82A53DD011ED938C006BA92A /* TKTumblr.h */,
250 | 82B09EAF123643A70006D003 /* TKTumblr.m */,
251 | 82B0A017123675EF0006D003 /* TKTumblrReadRequest.h */,
252 | 82B0A018123675EF0006D003 /* TKTumblrReadRequest.m */,
253 | 821DE1CD1237D09300B6A45D /* TKTumblelog.h */,
254 | 821DE1CE1237D09300B6A45D /* TKTumblelog.m */,
255 | 82F799021497ED4E00920028 /* TKRequest.h */,
256 | 82F799031497ED4E00920028 /* TKRequest.m */,
257 | 82F799061497F27300920028 /* TKPostsRequest.h */,
258 | 82F799071497F27300920028 /* TKPostsRequest.m */,
259 | 82F7992914992ED100920028 /* TKPostsResponse.h */,
260 | 82F7992A14992ED100920028 /* TKPostsResponse.m */,
261 | 82F7992F149A167A00920028 /* TKTumblelogsRequest.h */,
262 | 82F79930149A167A00920028 /* TKTumblelogsRequest.m */,
263 | 82F79935149A19F500920028 /* TKTumblelogsResponse.h */,
264 | 82F79936149A19F500920028 /* TKTumblelogsResponse.m */,
265 | );
266 | name = Classes;
267 | sourceTree = "";
268 | };
269 | 1058C7B0FEA5585E11CA2CBB /* Linked Frameworks */ = {
270 | isa = PBXGroup;
271 | children = (
272 | 827902F71497E2A90018F19E /* UIKit.framework */,
273 | 0867D69BFE84028FC02AAC07 /* Foundation.framework */,
274 | );
275 | name = "Linked Frameworks";
276 | sourceTree = "";
277 | };
278 | 1058C7B2FEA5585E11CA2CBB /* Other Frameworks */ = {
279 | isa = PBXGroup;
280 | children = (
281 | );
282 | name = "Other Frameworks";
283 | sourceTree = "";
284 | };
285 | 32C88DFF0371C24200C91783 /* Other Sources */ = {
286 | isa = PBXGroup;
287 | children = (
288 | );
289 | name = "Other Sources";
290 | sourceTree = "";
291 | };
292 | 8231532F1577816900D73D75 /* TumblrKit Tests for iOS */ = {
293 | isa = PBXGroup;
294 | children = (
295 | 8DC2EF5A0486A6940098B218 /* TKTumblelogsRequestTests.m */,
296 | 8DC2EF5A0486A6940098B217 /* TKTumblelogsRequestTests.h */,
297 | 823153351577816900D73D75 /* TumblrKit_Tests_for_iOS.h */,
298 | 823153361577816900D73D75 /* TumblrKit_Tests_for_iOS.m */,
299 | 823153301577816900D73D75 /* Supporting Files */,
300 | );
301 | path = "TumblrKit Tests for iOS";
302 | sourceTree = "";
303 | };
304 | 823153301577816900D73D75 /* Supporting Files */ = {
305 | isa = PBXGroup;
306 | children = (
307 | 823153311577816900D73D75 /* TumblrKit Tests for iOS-Info.plist */,
308 | 823153321577816900D73D75 /* InfoPlist.strings */,
309 | 823153381577816900D73D75 /* TumblrKit Tests for iOS-Prefix.pch */,
310 | );
311 | name = "Supporting Files";
312 | sourceTree = "";
313 | };
314 | 827902D514979B0C0018F19E /* Frameworks */ = {
315 | isa = PBXGroup;
316 | children = (
317 | 827902D614979B0C0018F19E /* Foundation.framework */,
318 | 827902FF1497E4600018F19E /* Cocoa.framework */,
319 | 82F79916149924E900920028 /* SenTestingKit.framework */,
320 | 8231532C1577816900D73D75 /* UIKit.framework */,
321 | 827903011497E4600018F19E /* Other Frameworks */,
322 | );
323 | name = Frameworks;
324 | sourceTree = "";
325 | };
326 | 827903011497E4600018F19E /* Other Frameworks */ = {
327 | isa = PBXGroup;
328 | children = (
329 | 827903021497E4600018F19E /* AppKit.framework */,
330 | 827903031497E4600018F19E /* CoreData.framework */,
331 | 827903041497E4600018F19E /* Foundation.framework */,
332 | );
333 | name = "Other Frameworks";
334 | sourceTree = "";
335 | };
336 | 8279032C1497E53E0018F19E /* TumblrKit for iOS */ = {
337 | isa = PBXGroup;
338 | children = (
339 | 8279032F1497E53E0018F19E /* TumblrKit_for_iOS.h */,
340 | 827903301497E53E0018F19E /* TumblrKit_for_iOS.m */,
341 | 8279032D1497E53E0018F19E /* Supporting Files */,
342 | );
343 | path = "TumblrKit for iOS";
344 | sourceTree = "";
345 | };
346 | 8279032D1497E53E0018F19E /* Supporting Files */ = {
347 | isa = PBXGroup;
348 | children = (
349 | 8279032E1497E53E0018F19E /* TumblrKit for iOS-Prefix.pch */,
350 | );
351 | name = "Supporting Files";
352 | sourceTree = "";
353 | };
354 | 827903501497E5860018F19E /* TumblrKit for Mac */ = {
355 | isa = PBXGroup;
356 | children = (
357 | 827903571497E5860018F19E /* TumblrKit_for_Mac.h */,
358 | 827903581497E5860018F19E /* TumblrKit_for_Mac.m */,
359 | 827903511497E5860018F19E /* Supporting Files */,
360 | );
361 | path = "TumblrKit for Mac";
362 | sourceTree = "";
363 | };
364 | 827903511497E5860018F19E /* Supporting Files */ = {
365 | isa = PBXGroup;
366 | children = (
367 | 827903521497E5860018F19E /* TumblrKit for Mac-Info.plist */,
368 | 827903531497E5860018F19E /* InfoPlist.strings */,
369 | 827903561497E5860018F19E /* TumblrKit for Mac-Prefix.pch */,
370 | );
371 | name = "Supporting Files";
372 | sourceTree = "";
373 | };
374 | 82B0A029123676790006D003 /* TumblrKit Additions */ = {
375 | isa = PBXGroup;
376 | children = (
377 | 82B09F40123664CD0006D003 /* NSDictionary+TumblrKit.h */,
378 | 82B09F41123664CD0006D003 /* NSDictionary+TumblrKit.m */,
379 | 826CD95C11EDDAD600F5CB24 /* NSString+TumblrKit.h */,
380 | 826CD95D11EDDAD600F5CB24 /* NSString+TumblrKit.m */,
381 | );
382 | name = "TumblrKit Additions";
383 | sourceTree = "";
384 | };
385 | 82F79919149924E900920028 /* TumblrKit Tests for Mac */ = {
386 | isa = PBXGroup;
387 | children = (
388 | 82F7991F149924E900920028 /* TumblrKit_Tests_for_Mac.h */,
389 | 82F79920149924E900920028 /* TumblrKit_Tests_for_Mac.m */,
390 | 82F7991A149924E900920028 /* Supporting Files */,
391 | );
392 | path = "TumblrKit Tests for Mac";
393 | sourceTree = "";
394 | };
395 | 82F7991A149924E900920028 /* Supporting Files */ = {
396 | isa = PBXGroup;
397 | children = (
398 | 82F7991B149924E900920028 /* TumblrKit Tests for Mac-Info.plist */,
399 | 82F7991C149924E900920028 /* InfoPlist.strings */,
400 | 82F79922149924E900920028 /* TumblrKit Tests for Mac-Prefix.pch */,
401 | );
402 | name = "Supporting Files";
403 | sourceTree = "";
404 | };
405 | /* End PBXGroup section */
406 |
407 | /* Begin PBXHeadersBuildPhase section */
408 | 827903281497E53E0018F19E /* Headers */ = {
409 | isa = PBXHeadersBuildPhase;
410 | buildActionMask = 2147483647;
411 | files = (
412 | 82F799081497F27300920028 /* TKPostsRequest.h in Headers */,
413 | 82F7992B14992ED100920028 /* TKPostsResponse.h in Headers */,
414 | 82F79931149A167B00920028 /* TKTumblelogsRequest.h in Headers */,
415 | 82F79937149A19F500920028 /* TKTumblelogsResponse.h in Headers */,
416 | );
417 | runOnlyForDeploymentPostprocessing = 0;
418 | };
419 | 8279034B1497E5860018F19E /* Headers */ = {
420 | isa = PBXHeadersBuildPhase;
421 | buildActionMask = 2147483647;
422 | files = (
423 | 82F799091497F27300920028 /* TKPostsRequest.h in Headers */,
424 | 82F7992C14992ED100920028 /* TKPostsResponse.h in Headers */,
425 | 82F79932149A167B00920028 /* TKTumblelogsRequest.h in Headers */,
426 | 82F79938149A19F500920028 /* TKTumblelogsResponse.h in Headers */,
427 | );
428 | runOnlyForDeploymentPostprocessing = 0;
429 | };
430 | /* End PBXHeadersBuildPhase section */
431 |
432 | /* Begin PBXNativeTarget section */
433 | 823153291577816900D73D75 /* TumblrKit Tests for iOS */ = {
434 | isa = PBXNativeTarget;
435 | buildConfigurationList = 8231533B1577816900D73D75 /* Build configuration list for PBXNativeTarget "TumblrKit Tests for iOS" */;
436 | buildPhases = (
437 | 823153251577816900D73D75 /* Sources */,
438 | 823153261577816900D73D75 /* Frameworks */,
439 | 823153271577816900D73D75 /* Resources */,
440 | 823153281577816900D73D75 /* ShellScript */,
441 | );
442 | buildRules = (
443 | );
444 | dependencies = (
445 | 823153441577850200D73D75 /* PBXTargetDependency */,
446 | );
447 | name = "TumblrKit Tests for iOS";
448 | productName = "TumblrKit Tests for iOS";
449 | productReference = 8231532A1577816900D73D75 /* TumblrKit Tests for iOS.octest */;
450 | productType = "com.apple.product-type.bundle";
451 | };
452 | 827903291497E53E0018F19E /* TumblrKit for iOS */ = {
453 | isa = PBXNativeTarget;
454 | buildConfigurationList = 827903321497E53E0018F19E /* Build configuration list for PBXNativeTarget "TumblrKit for iOS" */;
455 | buildPhases = (
456 | 827903261497E53E0018F19E /* Sources */,
457 | 827903271497E53E0018F19E /* Frameworks */,
458 | 827903281497E53E0018F19E /* Headers */,
459 | );
460 | buildRules = (
461 | );
462 | dependencies = (
463 | );
464 | name = "TumblrKit for iOS";
465 | productName = "TumblrKit for iOS";
466 | productReference = 8279032A1497E53E0018F19E /* libTumblrKit.a */;
467 | productType = "com.apple.product-type.library.static";
468 | };
469 | 8279034D1497E5860018F19E /* TumblrKit for Mac */ = {
470 | isa = PBXNativeTarget;
471 | buildConfigurationList = 8279035A1497E5860018F19E /* Build configuration list for PBXNativeTarget "TumblrKit for Mac" */;
472 | buildPhases = (
473 | 827903491497E5860018F19E /* Sources */,
474 | 8279034A1497E5860018F19E /* Frameworks */,
475 | 8279034B1497E5860018F19E /* Headers */,
476 | 8279034C1497E5860018F19E /* Resources */,
477 | );
478 | buildRules = (
479 | );
480 | dependencies = (
481 | );
482 | name = "TumblrKit for Mac";
483 | productName = "TumblrKit for Mac";
484 | productReference = 8279034E1497E5860018F19E /* TumblrKit.framework */;
485 | productType = "com.apple.product-type.framework";
486 | };
487 | 82F79914149924E900920028 /* TumblrKit Tests for Mac */ = {
488 | isa = PBXNativeTarget;
489 | buildConfigurationList = 82F79923149924E900920028 /* Build configuration list for PBXNativeTarget "TumblrKit Tests for Mac" */;
490 | buildPhases = (
491 | 82F79910149924E900920028 /* Sources */,
492 | 82F79911149924E900920028 /* Frameworks */,
493 | 82F79912149924E900920028 /* Resources */,
494 | 82F79913149924E900920028 /* ShellScript */,
495 | );
496 | buildRules = (
497 | );
498 | dependencies = (
499 | 82F79927149924FA00920028 /* PBXTargetDependency */,
500 | );
501 | name = "TumblrKit Tests for Mac";
502 | productName = "TumblrKit Tests for Mac";
503 | productReference = 82F79915149924E900920028 /* TumblrKit Tests for Mac.octest */;
504 | productType = "com.apple.product-type.bundle";
505 | };
506 | /* End PBXNativeTarget section */
507 |
508 | /* Begin PBXProject section */
509 | 0867D690FE84028FC02AAC07 /* Project object */ = {
510 | isa = PBXProject;
511 | attributes = {
512 | LastUpgradeCheck = 0440;
513 | ORGANIZATIONNAME = TumblrKit;
514 | };
515 | buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "TumblrKit" */;
516 | compatibilityVersion = "Xcode 3.2";
517 | developmentRegion = English;
518 | hasScannedForEncodings = 1;
519 | knownRegions = (
520 | English,
521 | Japanese,
522 | French,
523 | German,
524 | en,
525 | );
526 | mainGroup = 0867D691FE84028FC02AAC07 /* TumblrKit */;
527 | productRefGroup = 034768DFFF38A50411DB9C8B /* Products */;
528 | projectDirPath = "";
529 | projectRoot = "";
530 | targets = (
531 | 82B09E70123543700006D003 /* Documentation */,
532 | 827903291497E53E0018F19E /* TumblrKit for iOS */,
533 | 8279034D1497E5860018F19E /* TumblrKit for Mac */,
534 | 82F79914149924E900920028 /* TumblrKit Tests for Mac */,
535 | 823153291577816900D73D75 /* TumblrKit Tests for iOS */,
536 | );
537 | };
538 | /* End PBXProject section */
539 |
540 | /* Begin PBXResourcesBuildPhase section */
541 | 823153271577816900D73D75 /* Resources */ = {
542 | isa = PBXResourcesBuildPhase;
543 | buildActionMask = 2147483647;
544 | files = (
545 | 823153341577816900D73D75 /* InfoPlist.strings in Resources */,
546 | );
547 | runOnlyForDeploymentPostprocessing = 0;
548 | };
549 | 8279034C1497E5860018F19E /* Resources */ = {
550 | isa = PBXResourcesBuildPhase;
551 | buildActionMask = 2147483647;
552 | files = (
553 | 827903551497E5860018F19E /* InfoPlist.strings in Resources */,
554 | );
555 | runOnlyForDeploymentPostprocessing = 0;
556 | };
557 | 82F79912149924E900920028 /* Resources */ = {
558 | isa = PBXResourcesBuildPhase;
559 | buildActionMask = 2147483647;
560 | files = (
561 | 82F7991E149924E900920028 /* InfoPlist.strings in Resources */,
562 | );
563 | runOnlyForDeploymentPostprocessing = 0;
564 | };
565 | /* End PBXResourcesBuildPhase section */
566 |
567 | /* Begin PBXShellScriptBuildPhase section */
568 | 823153281577816900D73D75 /* ShellScript */ = {
569 | isa = PBXShellScriptBuildPhase;
570 | buildActionMask = 2147483647;
571 | files = (
572 | );
573 | inputPaths = (
574 | );
575 | outputPaths = (
576 | );
577 | runOnlyForDeploymentPostprocessing = 0;
578 | shellPath = /bin/sh;
579 | shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n";
580 | };
581 | 82B09E6F123543700006D003 /* ShellScript */ = {
582 | isa = PBXShellScriptBuildPhase;
583 | buildActionMask = 2147483647;
584 | files = (
585 | );
586 | inputPaths = (
587 | );
588 | outputPaths = (
589 | );
590 | runOnlyForDeploymentPostprocessing = 0;
591 | shellPath = /bin/sh;
592 | shellScript = "# Build the doxygen documentation for the project and load the docset into Xcode.\n\n# Use the following to adjust the value of the $DOXYGEN_PATH User-Defined Setting:\n# Binary install location: /Applications/Doxygen.app/Contents/Resources/doxygen\n# Source build install location: /usr/local/bin/doxygen\n\n# If the config file doesn't exist, run 'doxygen -g $SOURCE_ROOT/doxygen.config' to \n# a get default file.\n\nif ! [ -f $SOURCE_ROOT/doxygen.config ] \nthen \n echo doxygen config file does not exist\n $DOXYGEN_PATH -g $SOURCE_ROOT/doxygen.config\nfi\n\n# Append the proper input/output directories and docset info to the config file.\n# This works even though values are assigned higher up in the file. Easier than sed.\n\ncp -a $SOURCE_ROOT/doxygen.config $TEMP_DIR/doxygen.config\n\necho \"INPUT = $SOURCE_ROOT\" >> $TEMP_DIR/doxygen.config\necho \"OUTPUT_DIRECTORY = $SOURCE_ROOT/DoxygenDocs.docset\" >> $TEMP_DIR/doxygen.config\necho \"GENERATE_DOCSET = YES\" >> $TEMP_DIR/doxygen.config\necho \"DOCSET_BUNDLE_ID = com.mycompany.DoxygenExample\" >> $TEMP_DIR/doxygen.config\n\n# Run doxygen on the updated config file.\n# Note: doxygen creates a Makefile that does most of the heavy lifting.\n\n$DOXYGEN_PATH $TEMP_DIR/doxygen.config\n\n# make will invoke docsetutil. Take a look at the Makefile to see how this is done.\n\nmake -C $SOURCE_ROOT/DoxygenDocs.docset/html install\n\n# Construct a temporary applescript file to tell Xcode to load a docset.\n\nrm -f $TEMP_DIR/loadDocSet.scpt\n\necho \"tell application \\\"Xcode\\\"\" >> $TEMP_DIR/loadDocSet.scpt\necho \"load documentation set with path \\\"/Users/$USER/Library/Developer/Shared/Documentation/DocSets/\\\"\" \n >> $TEMP_DIR/loadDocSet.scpt\necho \"end tell\" >> $TEMP_DIR/loadDocSet.scpt\n\n# Run the load-docset applescript command.\n\nosascript $TEMP_DIR/loadDocSet.scpt\n\nexit 0";
593 | };
594 | 82F79913149924E900920028 /* ShellScript */ = {
595 | isa = PBXShellScriptBuildPhase;
596 | buildActionMask = 2147483647;
597 | files = (
598 | );
599 | inputPaths = (
600 | );
601 | outputPaths = (
602 | );
603 | runOnlyForDeploymentPostprocessing = 0;
604 | shellPath = /bin/sh;
605 | shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n";
606 | };
607 | /* End PBXShellScriptBuildPhase section */
608 |
609 | /* Begin PBXSourcesBuildPhase section */
610 | 823153251577816900D73D75 /* Sources */ = {
611 | isa = PBXSourcesBuildPhase;
612 | buildActionMask = 2147483647;
613 | files = (
614 | 823153371577816900D73D75 /* TumblrKit_Tests_for_iOS.m in Sources */,
615 | 8DC2EF5A0486A6940098B219 /* TKTumblelogsRequestTests.m in Sources */,
616 | );
617 | runOnlyForDeploymentPostprocessing = 0;
618 | };
619 | 827903261497E53E0018F19E /* Sources */ = {
620 | isa = PBXSourcesBuildPhase;
621 | buildActionMask = 2147483647;
622 | files = (
623 | 82F799051497ED7A00920028 /* TKRequest.m in Sources */,
624 | 82F798F31497E78A00920028 /* NSDictionary+TumblrKit.m in Sources */,
625 | 82F798F41497E78A00920028 /* NSString+TumblrKit.m in Sources */,
626 | 82F798F51497E78A00920028 /* TKPost.m in Sources */,
627 | 82F798F61497E78A00920028 /* TKTumblr.m in Sources */,
628 | 82F798F71497E78A00920028 /* TKTumblrReadRequest.m in Sources */,
629 | 82F798F81497E78A00920028 /* TKTumblelog.m in Sources */,
630 | 827903311497E53E0018F19E /* TumblrKit_for_iOS.m in Sources */,
631 | 82F7990A1497F27300920028 /* TKPostsRequest.m in Sources */,
632 | 82F7992D14992ED100920028 /* TKPostsResponse.m in Sources */,
633 | 82F79933149A167B00920028 /* TKTumblelogsRequest.m in Sources */,
634 | 82F79939149A19F500920028 /* TKTumblelogsResponse.m in Sources */,
635 | );
636 | runOnlyForDeploymentPostprocessing = 0;
637 | };
638 | 827903491497E5860018F19E /* Sources */ = {
639 | isa = PBXSourcesBuildPhase;
640 | buildActionMask = 2147483647;
641 | files = (
642 | 82F7990F1499244800920028 /* TKRequest.m in Sources */,
643 | 82F798FA1497E7A400920028 /* NSDictionary+TumblrKit.m in Sources */,
644 | 82F798FB1497E7A400920028 /* NSString+TumblrKit.m in Sources */,
645 | 82F798FC1497E7A400920028 /* TKPost.m in Sources */,
646 | 82F798FD1497E7A400920028 /* TKTumblr.m in Sources */,
647 | 82F798FE1497E7A400920028 /* TKTumblrReadRequest.m in Sources */,
648 | 82F798FF1497E7A400920028 /* TKTumblelog.m in Sources */,
649 | 827903591497E5860018F19E /* TumblrKit_for_Mac.m in Sources */,
650 | 82F7990B1497F27300920028 /* TKPostsRequest.m in Sources */,
651 | 82F7992E14992ED100920028 /* TKPostsResponse.m in Sources */,
652 | 82F79934149A167B00920028 /* TKTumblelogsRequest.m in Sources */,
653 | 82F7993A149A19F500920028 /* TKTumblelogsResponse.m in Sources */,
654 | );
655 | runOnlyForDeploymentPostprocessing = 0;
656 | };
657 | 82F79910149924E900920028 /* Sources */ = {
658 | isa = PBXSourcesBuildPhase;
659 | buildActionMask = 2147483647;
660 | files = (
661 | 82F79921149924E900920028 /* TumblrKit_Tests_for_Mac.m in Sources */,
662 | );
663 | runOnlyForDeploymentPostprocessing = 0;
664 | };
665 | /* End PBXSourcesBuildPhase section */
666 |
667 | /* Begin PBXTargetDependency section */
668 | 823153441577850200D73D75 /* PBXTargetDependency */ = {
669 | isa = PBXTargetDependency;
670 | target = 827903291497E53E0018F19E /* TumblrKit for iOS */;
671 | targetProxy = 823153431577850200D73D75 /* PBXContainerItemProxy */;
672 | };
673 | 82F79927149924FA00920028 /* PBXTargetDependency */ = {
674 | isa = PBXTargetDependency;
675 | target = 8279034D1497E5860018F19E /* TumblrKit for Mac */;
676 | targetProxy = 82F79926149924FA00920028 /* PBXContainerItemProxy */;
677 | };
678 | /* End PBXTargetDependency section */
679 |
680 | /* Begin PBXVariantGroup section */
681 | 089C1666FE841158C02AAC07 /* InfoPlist.strings */ = {
682 | isa = PBXVariantGroup;
683 | children = (
684 | 089C1667FE841158C02AAC07 /* English */,
685 | );
686 | name = InfoPlist.strings;
687 | sourceTree = "";
688 | };
689 | 823153321577816900D73D75 /* InfoPlist.strings */ = {
690 | isa = PBXVariantGroup;
691 | children = (
692 | 823153331577816900D73D75 /* en */,
693 | );
694 | name = InfoPlist.strings;
695 | sourceTree = "";
696 | };
697 | 827903531497E5860018F19E /* InfoPlist.strings */ = {
698 | isa = PBXVariantGroup;
699 | children = (
700 | 827903541497E5860018F19E /* en */,
701 | );
702 | name = InfoPlist.strings;
703 | sourceTree = "";
704 | };
705 | 82F7991C149924E900920028 /* InfoPlist.strings */ = {
706 | isa = PBXVariantGroup;
707 | children = (
708 | 82F7991D149924E900920028 /* en */,
709 | );
710 | name = InfoPlist.strings;
711 | sourceTree = "";
712 | };
713 | /* End PBXVariantGroup section */
714 |
715 | /* Begin XCBuildConfiguration section */
716 | 1DEB91B208733DA50010E9CD /* Debug */ = {
717 | isa = XCBuildConfiguration;
718 | buildSettings = {
719 | ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
720 | GCC_C_LANGUAGE_STANDARD = gnu99;
721 | GCC_OPTIMIZATION_LEVEL = 0;
722 | GCC_WARN_ABOUT_RETURN_TYPE = YES;
723 | GCC_WARN_UNUSED_VARIABLE = YES;
724 | ONLY_ACTIVE_ARCH = YES;
725 | PRODUCT_NAME = TumblrKit;
726 | SDKROOT = macosx;
727 | };
728 | name = Debug;
729 | };
730 | 1DEB91B308733DA50010E9CD /* Release */ = {
731 | isa = XCBuildConfiguration;
732 | buildSettings = {
733 | ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
734 | GCC_C_LANGUAGE_STANDARD = gnu99;
735 | GCC_WARN_ABOUT_RETURN_TYPE = YES;
736 | GCC_WARN_UNUSED_VARIABLE = YES;
737 | PRODUCT_NAME = TumblrKit;
738 | SDKROOT = macosx;
739 | };
740 | name = Release;
741 | };
742 | 823153391577816900D73D75 /* Debug */ = {
743 | isa = XCBuildConfiguration;
744 | buildSettings = {
745 | ALWAYS_SEARCH_USER_PATHS = NO;
746 | ARCHS = "$(ARCHS_STANDARD_32_BIT)";
747 | CLANG_ENABLE_OBJC_ARC = YES;
748 | COPY_PHASE_STRIP = NO;
749 | FRAMEWORK_SEARCH_PATHS = (
750 | "$(SDKROOT)/Developer/Library/Frameworks",
751 | "$(DEVELOPER_LIBRARY_DIR)/Frameworks",
752 | );
753 | GCC_DYNAMIC_NO_PIC = NO;
754 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
755 | GCC_PREFIX_HEADER = "TumblrKit Tests for iOS/TumblrKit Tests for iOS-Prefix.pch";
756 | GCC_PREPROCESSOR_DEFINITIONS = (
757 | "DEBUG=1",
758 | "$(inherited)",
759 | );
760 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
761 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
762 | GCC_WARN_UNINITIALIZED_AUTOS = YES;
763 | INFOPLIST_FILE = "TumblrKit Tests for iOS/TumblrKit Tests for iOS-Info.plist";
764 | IPHONEOS_DEPLOYMENT_TARGET = 5.1;
765 | PRODUCT_NAME = "$(TARGET_NAME)";
766 | SDKROOT = iphoneos;
767 | WRAPPER_EXTENSION = octest;
768 | };
769 | name = Debug;
770 | };
771 | 8231533A1577816900D73D75 /* Release */ = {
772 | isa = XCBuildConfiguration;
773 | buildSettings = {
774 | ALWAYS_SEARCH_USER_PATHS = NO;
775 | ARCHS = "$(ARCHS_STANDARD_32_BIT)";
776 | CLANG_ENABLE_OBJC_ARC = YES;
777 | COPY_PHASE_STRIP = YES;
778 | FRAMEWORK_SEARCH_PATHS = (
779 | "$(SDKROOT)/Developer/Library/Frameworks",
780 | "$(DEVELOPER_LIBRARY_DIR)/Frameworks",
781 | );
782 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
783 | GCC_PREFIX_HEADER = "TumblrKit Tests for iOS/TumblrKit Tests for iOS-Prefix.pch";
784 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
785 | GCC_WARN_UNINITIALIZED_AUTOS = YES;
786 | INFOPLIST_FILE = "TumblrKit Tests for iOS/TumblrKit Tests for iOS-Info.plist";
787 | IPHONEOS_DEPLOYMENT_TARGET = 5.1;
788 | PRODUCT_NAME = "$(TARGET_NAME)";
789 | SDKROOT = iphoneos;
790 | VALIDATE_PRODUCT = YES;
791 | WRAPPER_EXTENSION = octest;
792 | };
793 | name = Release;
794 | };
795 | 827903331497E53E0018F19E /* Debug */ = {
796 | isa = XCBuildConfiguration;
797 | buildSettings = {
798 | ALWAYS_SEARCH_USER_PATHS = NO;
799 | ARCHS = "$(ARCHS_STANDARD_32_BIT)";
800 | CLANG_ENABLE_OBJC_ARC = YES;
801 | COPY_PHASE_STRIP = NO;
802 | DSTROOT = /tmp/TumblrKit_for_iOS.dst;
803 | GCC_DYNAMIC_NO_PIC = NO;
804 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
805 | GCC_PREFIX_HEADER = "TumblrKit for iOS/TumblrKit for iOS-Prefix.pch";
806 | GCC_PREPROCESSOR_DEFINITIONS = (
807 | "DEBUG=1",
808 | "$(inherited)",
809 | );
810 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
811 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
812 | GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
813 | IPHONEOS_DEPLOYMENT_TARGET = 5.0;
814 | OTHER_LDFLAGS = "-ObjC";
815 | PRODUCT_NAME = "$(PRODUCT_NAME)";
816 | SDKROOT = iphoneos;
817 | SKIP_INSTALL = YES;
818 | WRAPPER_EXTENSION = TumblrKit;
819 | };
820 | name = Debug;
821 | };
822 | 827903341497E53E0018F19E /* Release */ = {
823 | isa = XCBuildConfiguration;
824 | buildSettings = {
825 | ALWAYS_SEARCH_USER_PATHS = NO;
826 | ARCHS = "$(ARCHS_STANDARD_32_BIT)";
827 | CLANG_ENABLE_OBJC_ARC = YES;
828 | COPY_PHASE_STRIP = YES;
829 | DSTROOT = /tmp/TumblrKit_for_iOS.dst;
830 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
831 | GCC_PREFIX_HEADER = "TumblrKit for iOS/TumblrKit for iOS-Prefix.pch";
832 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
833 | GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
834 | IPHONEOS_DEPLOYMENT_TARGET = 5.0;
835 | OTHER_LDFLAGS = "-ObjC";
836 | PRODUCT_NAME = "$(PRODUCT_NAME)";
837 | SDKROOT = iphoneos;
838 | SKIP_INSTALL = YES;
839 | VALIDATE_PRODUCT = YES;
840 | WRAPPER_EXTENSION = TumblrKit;
841 | };
842 | name = Release;
843 | };
844 | 8279035B1497E5860018F19E /* Debug */ = {
845 | isa = XCBuildConfiguration;
846 | buildSettings = {
847 | ALWAYS_SEARCH_USER_PATHS = NO;
848 | ARCHS = "$(ARCHS_STANDARD_64_BIT)";
849 | CLANG_ENABLE_OBJC_ARC = YES;
850 | COMBINE_HIDPI_IMAGES = YES;
851 | COPY_PHASE_STRIP = NO;
852 | DYLIB_COMPATIBILITY_VERSION = 1;
853 | DYLIB_CURRENT_VERSION = 1;
854 | FRAMEWORK_VERSION = A;
855 | GCC_DYNAMIC_NO_PIC = NO;
856 | GCC_ENABLE_OBJC_EXCEPTIONS = YES;
857 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
858 | GCC_PREFIX_HEADER = "TumblrKit for Mac/TumblrKit for Mac-Prefix.pch";
859 | GCC_PREPROCESSOR_DEFINITIONS = (
860 | "DEBUG=1",
861 | "$(inherited)",
862 | );
863 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
864 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
865 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
866 | GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
867 | INFOPLIST_FILE = "TumblrKit for Mac/TumblrKit for Mac-Info.plist";
868 | MACOSX_DEPLOYMENT_TARGET = 10.7;
869 | PRODUCT_NAME = "$(PRODUCT_NAME)";
870 | WRAPPER_EXTENSION = framework;
871 | };
872 | name = Debug;
873 | };
874 | 8279035C1497E5860018F19E /* Release */ = {
875 | isa = XCBuildConfiguration;
876 | buildSettings = {
877 | ALWAYS_SEARCH_USER_PATHS = NO;
878 | ARCHS = "$(ARCHS_STANDARD_64_BIT)";
879 | CLANG_ENABLE_OBJC_ARC = YES;
880 | COMBINE_HIDPI_IMAGES = YES;
881 | COPY_PHASE_STRIP = YES;
882 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
883 | DYLIB_COMPATIBILITY_VERSION = 1;
884 | DYLIB_CURRENT_VERSION = 1;
885 | FRAMEWORK_VERSION = A;
886 | GCC_ENABLE_OBJC_EXCEPTIONS = YES;
887 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
888 | GCC_PREFIX_HEADER = "TumblrKit for Mac/TumblrKit for Mac-Prefix.pch";
889 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
890 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
891 | GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
892 | INFOPLIST_FILE = "TumblrKit for Mac/TumblrKit for Mac-Info.plist";
893 | MACOSX_DEPLOYMENT_TARGET = 10.7;
894 | PRODUCT_NAME = "$(PRODUCT_NAME)";
895 | WRAPPER_EXTENSION = framework;
896 | };
897 | name = Release;
898 | };
899 | 82B09E71123543700006D003 /* Debug */ = {
900 | isa = XCBuildConfiguration;
901 | buildSettings = {
902 | COMBINE_HIDPI_IMAGES = YES;
903 | COPY_PHASE_STRIP = NO;
904 | DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen;
905 | GCC_DYNAMIC_NO_PIC = NO;
906 | GCC_OPTIMIZATION_LEVEL = 0;
907 | PRODUCT_NAME = Documentation;
908 | };
909 | name = Debug;
910 | };
911 | 82B09E72123543700006D003 /* Release */ = {
912 | isa = XCBuildConfiguration;
913 | buildSettings = {
914 | COMBINE_HIDPI_IMAGES = YES;
915 | COPY_PHASE_STRIP = YES;
916 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
917 | DOXYGEN_PATH = /Applications/Doxygen.app/Contents/Resources/doxygen;
918 | PRODUCT_NAME = Documentation;
919 | ZERO_LINK = YES;
920 | };
921 | name = Release;
922 | };
923 | 82F79924149924E900920028 /* Debug */ = {
924 | isa = XCBuildConfiguration;
925 | buildSettings = {
926 | ALWAYS_SEARCH_USER_PATHS = NO;
927 | ARCHS = "$(ARCHS_STANDARD_64_BIT)";
928 | CLANG_ENABLE_OBJC_ARC = YES;
929 | COMBINE_HIDPI_IMAGES = YES;
930 | COPY_PHASE_STRIP = NO;
931 | FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks/**";
932 | GCC_DYNAMIC_NO_PIC = NO;
933 | GCC_ENABLE_OBJC_EXCEPTIONS = YES;
934 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
935 | GCC_PREFIX_HEADER = "TumblrKit Tests for Mac/TumblrKit Tests for Mac-Prefix.pch";
936 | GCC_PREPROCESSOR_DEFINITIONS = (
937 | "DEBUG=1",
938 | "$(inherited)",
939 | );
940 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
941 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
942 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
943 | GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
944 | INFOPLIST_FILE = "TumblrKit Tests for Mac/TumblrKit Tests for Mac-Info.plist";
945 | MACOSX_DEPLOYMENT_TARGET = 10.7;
946 | PRODUCT_NAME = "$(TARGET_NAME)";
947 | WRAPPER_EXTENSION = octest;
948 | };
949 | name = Debug;
950 | };
951 | 82F79925149924E900920028 /* Release */ = {
952 | isa = XCBuildConfiguration;
953 | buildSettings = {
954 | ALWAYS_SEARCH_USER_PATHS = NO;
955 | ARCHS = "$(ARCHS_STANDARD_64_BIT)";
956 | CLANG_ENABLE_OBJC_ARC = YES;
957 | COMBINE_HIDPI_IMAGES = YES;
958 | COPY_PHASE_STRIP = YES;
959 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
960 | FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks/**";
961 | GCC_ENABLE_OBJC_EXCEPTIONS = YES;
962 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
963 | GCC_PREFIX_HEADER = "TumblrKit Tests for Mac/TumblrKit Tests for Mac-Prefix.pch";
964 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
965 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
966 | GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
967 | INFOPLIST_FILE = "TumblrKit Tests for Mac/TumblrKit Tests for Mac-Info.plist";
968 | MACOSX_DEPLOYMENT_TARGET = 10.7;
969 | PRODUCT_NAME = "$(TARGET_NAME)";
970 | WRAPPER_EXTENSION = octest;
971 | };
972 | name = Release;
973 | };
974 | /* End XCBuildConfiguration section */
975 |
976 | /* Begin XCConfigurationList section */
977 | 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "TumblrKit" */ = {
978 | isa = XCConfigurationList;
979 | buildConfigurations = (
980 | 1DEB91B208733DA50010E9CD /* Debug */,
981 | 1DEB91B308733DA50010E9CD /* Release */,
982 | );
983 | defaultConfigurationIsVisible = 0;
984 | defaultConfigurationName = Release;
985 | };
986 | 8231533B1577816900D73D75 /* Build configuration list for PBXNativeTarget "TumblrKit Tests for iOS" */ = {
987 | isa = XCConfigurationList;
988 | buildConfigurations = (
989 | 823153391577816900D73D75 /* Debug */,
990 | 8231533A1577816900D73D75 /* Release */,
991 | );
992 | defaultConfigurationIsVisible = 0;
993 | defaultConfigurationName = Release;
994 | };
995 | 827903321497E53E0018F19E /* Build configuration list for PBXNativeTarget "TumblrKit for iOS" */ = {
996 | isa = XCConfigurationList;
997 | buildConfigurations = (
998 | 827903331497E53E0018F19E /* Debug */,
999 | 827903341497E53E0018F19E /* Release */,
1000 | );
1001 | defaultConfigurationIsVisible = 0;
1002 | defaultConfigurationName = Release;
1003 | };
1004 | 8279035A1497E5860018F19E /* Build configuration list for PBXNativeTarget "TumblrKit for Mac" */ = {
1005 | isa = XCConfigurationList;
1006 | buildConfigurations = (
1007 | 8279035B1497E5860018F19E /* Debug */,
1008 | 8279035C1497E5860018F19E /* Release */,
1009 | );
1010 | defaultConfigurationIsVisible = 0;
1011 | defaultConfigurationName = Release;
1012 | };
1013 | 82B09E781235438A0006D003 /* Build configuration list for PBXAggregateTarget "Documentation" */ = {
1014 | isa = XCConfigurationList;
1015 | buildConfigurations = (
1016 | 82B09E71123543700006D003 /* Debug */,
1017 | 82B09E72123543700006D003 /* Release */,
1018 | );
1019 | defaultConfigurationIsVisible = 0;
1020 | defaultConfigurationName = Release;
1021 | };
1022 | 82F79923149924E900920028 /* Build configuration list for PBXNativeTarget "TumblrKit Tests for Mac" */ = {
1023 | isa = XCConfigurationList;
1024 | buildConfigurations = (
1025 | 82F79924149924E900920028 /* Debug */,
1026 | 82F79925149924E900920028 /* Release */,
1027 | );
1028 | defaultConfigurationIsVisible = 0;
1029 | defaultConfigurationName = Release;
1030 | };
1031 | /* End XCConfigurationList section */
1032 | };
1033 | rootObject = 0867D690FE84028FC02AAC07 /* Project object */;
1034 | }
1035 |
--------------------------------------------------------------------------------