Skip to content
Browse files

first commit

  • Loading branch information...
0 parents commit 6673159ba10dd84a6eb112534f1d5a01d21a381a @nobuo-danjou nobuo-danjou committed Aug 17, 2010
4 .gitignore
@@ -0,0 +1,4 @@
+build/*
+*.pbxuser
+*.mode1v3
+.DS_Store
35 Classes/AnimatableImage.h
@@ -0,0 +1,35 @@
+//
+// AnimatableImage.h
+// Tumborine
+//
+// Created by Nobuo Danjou on 10/07/25.
+// Copyright 2010 株式会社ソフリット. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface AnimatableImage : UIImage {
+@private
+ int position_;
+ NSData *data_;
+ NSData *gif89a_header_;
+ NSData *global_color_table_;
+ NSMutableArray *imagedata_;
+ NSArray *images;
+@public
+ BOOL has_animation_;
+}
+
+@property (readonly) BOOL has_animation;
+@property (readonly) NSArray *images;
+
+- (BOOL) parseData:(NSData *)data;
+- (BOOL) parseHeader;
+- (NSData *) read:(int)length;
+- (NSNumber *) readint;
+- (BOOL) readdata;
+- (void) readdataseq;
+- (NSMutableDictionary *) parseBlock;
+- (NSArray *) getImageArray;
+
+@end
171 Classes/AnimatableImage.m
@@ -0,0 +1,171 @@
+//
+// AnimatableImage.m
+// Tumborine
+//
+// Created by Nobuo Danjou on 10/07/25.
+// Copyright 2010 株式会社ソフリット. All rights reserved.
+//
+
+#import "AnimatableImage.h"
+#define UNKNOWN_BLOCK 0x00
+#define PLAIN_TEXT_EXTENSION 0x01
+#define GRAPHIC_CONTROL_EXTENSION 0xf9
+#define COMMENT_EXTENSION 0xfe
+#define APPLICATION_EXTENSION 0xff
+#define EXTENSION_BLOCK 0x21
+#define IMAGE_DATA_BLOCK 0x2C
+#define TRAILER_BLOCK 0x3b
+
+@implementation AnimatableImage
+
+@synthesize has_animation = has_animation_;
+@synthesize images;
+
+- (id) initWithData:(NSData *)data {
+ self = [super initWithData:data];
+ if ([self parseData:data]) {
+ has_animation_ = YES;
+ images = [self getImageArray];
+ } else {
+ has_animation_ = NO;
+ }
+ return self;
+}
+
+- (NSArray *) getImageArray {
+ if (!has_animation_) {
+ return nil;
+ }
+ NSMutableArray *ret = [[NSMutableArray alloc] init];
+ for (int i = 0; i < [imagedata_ count]; i++) {
+ NSDictionary *dict = [imagedata_ objectAtIndex:i];
+ NSData *body = [data_ subdataWithRange:NSMakeRange([[dict valueForKey:@"start"] intValue],[[dict valueForKey:@"length"] intValue])];
+ NSMutableData *img = [[NSMutableData alloc] init];
+ [img setData:[gif89a_header_ copy]];
+ [img appendData:[global_color_table_ copy]];
+ [img appendData:body];
+ [img appendData:[[[NSNumber numberWithUnsignedChar:TRAILER_BLOCK] stringValue] dataUsingEncoding:NSUTF8StringEncoding]];
+ [ret addObject:[[UIImage alloc] initWithData:img]];
+ }
+ return ret;
+}
+
+- (BOOL) parseData:(NSData *)data {
+ if (data == nil) {
+ return NO;
+ }
+ data_ = data;
+ position_ = 0;
+ if (![self parseHeader]) {
+ return NO;
+ }
+ imagedata_ = [[NSMutableArray alloc] init];
+ NSMutableDictionary *block;
+ BOOL found_application_extension;
+ NSDictionary *img;
+ NSNumber *length;
+ while (block = [self parseBlock]) {
+ unsigned char key = [[block valueForKey:@"type"] unsignedCharValue];
+ if (key == TRAILER_BLOCK) {
+ break;
+ }
+ switch (key) {
+ case APPLICATION_EXTENSION:
+ found_application_extension = YES;
+ break;
+ case GRAPHIC_CONTROL_EXTENSION:
+ [block removeObjectForKey:@"key"];
+ [imagedata_ addObject:block];
+ break;
+ case IMAGE_DATA_BLOCK:
+ img = [imagedata_ lastObject];
+ length = [NSNumber numberWithInt:[[img valueForKey:@"length"] intValue] + [[block valueForKey:@"length"] intValue]];
+ [img setValue:length forKey:@"length"];
+ break;
+ default:
+ break;
+ }
+ }
+ return found_application_extension;
+}
+
+- (BOOL) parseHeader {
+ gif89a_header_ = [self read:13];
+ NSString *sign = [[NSString alloc] initWithData:[gif89a_header_ subdataWithRange:NSMakeRange(0, 6)] encoding:NSUTF8StringEncoding];
+ if (! [sign isEqualToString:@"GIF89a"]) {
+ return NO;
+ }
+ unsigned char packed[1];
+ [gif89a_header_ getBytes:packed range:NSMakeRange(10, 1)];
+ int global_color_table_length = (2 << (packed[0] & 0x07)) * 3;
+ global_color_table_ = [self read:global_color_table_length];
+ return YES;
+}
+
+- (NSData *) read:(int)length {
+ NSData *ret = [data_ subdataWithRange:NSMakeRange(position_, length)];
+ position_ += length;
+ return ret;
+}
+
+- (NSNumber *) readint {
+ unsigned char aBuffer[1];
+ [[self read:1] getBytes:aBuffer length:1];
+ return [NSNumber numberWithUnsignedChar: aBuffer[0]];
+}
+
+- (BOOL) readdata {
+ NSNumber *length = [self readint];
+ if ([length isEqualToNumber:[NSNumber numberWithInt:0]]) {
+ return NO;
+ }
+ [self read:[length intValue]];
+ return YES;
+}
+
+- (void) readdataseq {
+ BOOL b = YES;
+ while (b) {
+ b = [self readdata];
+ }
+}
+
+- (NSMutableDictionary *) parseBlock {
+ NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
+ int pos = position_;
+ [dict setValue:[NSNumber numberWithUnsignedChar:UNKNOWN_BLOCK] forKey:@"type"];
+ [dict setValue:[NSNumber numberWithInt:pos] forKey:@"start"];
+ NSNumber *intro = [self readint];
+ switch ([intro unsignedCharValue]) {
+ case EXTENSION_BLOCK:
+ [dict setValue:[self readint] forKey:@"type"];
+ [self readdataseq];
+ break;
+ case IMAGE_DATA_BLOCK:
+ [dict setValue:intro forKey:@"type"];
+ NSData *header = [self read:9];
+ unsigned char packed;
+ [header getBytes:&packed range:NSMakeRange(8, 1)];
+ if (packed & 0x80) {
+ int local_color_table_length = (2 << (packed & 0x07)) * 3;
+ [self read:local_color_table_length];
+ }
+ [self read:1];
+ [self readdataseq];
+ break;
+ case TRAILER_BLOCK:
+ [dict setValue:intro forKey:@"type"];
+ break;
+ default:
+ break;
+ }
+ [dict setValue:[NSNumber numberWithInt:(position_ - pos)] forKey:@"length"];
+ if ([[dict valueForKey:@"type"] isEqualToValue:[NSNumber numberWithUnsignedChar:UNKNOWN_BLOCK]]) {
+ return nil;
+ } else {
+ return dict;
+ }
+
+}
+
+@end
22 Classes/AnimatableImageView.h
@@ -0,0 +1,22 @@
+//
+// AnimatableImageView.h
+// Tumborine
+//
+// Created by Nobuo Danjou on 10/08/07.
+// Copyright 2010 株式会社ソフリット. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+@interface AnimatableImageView : UIImageView {
+ NSTimer *timer_;
+ int animationIndex_;
+}
+
+- (void)animateGIF89a;
+- (BOOL)isAnimatingGIF89a;
+- (void)stopAnimatingGIF89a;
+- (void)timerEvent:(NSTimer *)sender;
+
+@end
46 Classes/AnimatableImageView.m
@@ -0,0 +1,46 @@
+//
+// AnimatableImageView.m
+// Tumborine
+//
+// Created by Nobuo Danjou on 10/08/07.
+// Copyright 2010 株式会社ソフリット. All rights reserved.
+//
+
+#import "AnimatableImageView.h"
+
+
+@implementation AnimatableImageView
+
+- (void)animateGIF89a {
+ animationIndex_ = 0;
+ timer_ = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(timerEvent:) userInfo:nil repeats:YES];
+}
+
+- (BOOL)isAnimatingGIF89a {
+ return [timer_ isValid];
+}
+
+- (void)stopAnimatingGIF89a {
+ [timer_ invalidate];
+ timer_ = nil;
+}
+
+- (void)timerEvent:(NSTimer *)sender {
+
+ UIGraphicsBeginImageContext(self.bounds.size);
+ UIImage *i = [self.animationImages objectAtIndex:animationIndex_];
+ if (self.image) {
+ [self.image drawInRect:self.bounds];
+ }
+ [i drawInRect:self.bounds blendMode:kCGBlendModeNormal alpha:1];
+ self.image = UIGraphicsGetImageFromCurrentImageContext();
+ UIGraphicsEndImageContext();
+ if (animationIndex_ + 1 == [self.animationImages count]) {
+ animationIndex_ = 0;
+ } else {
+ animationIndex_++;
+ }
+
+}
+
+@end
20 Classes/TumblrAPIOperation.h
@@ -0,0 +1,20 @@
+//
+// TumblrAPIOperation.h
+// Tumborine
+//
+// Created by Nobuo Danjou on 10/07/24.
+// Copyright 2010 株式会社ソフリット. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <libxml/tree.h>
+
+@interface TumblrAPIOperation : NSOperation {
+ xmlParserCtxtPtr parser_;
+ NSString *currentTag_;
+ NSMutableArray *entries_;
+ BOOL executing_, finished_;
+}
+
+@property (readonly) NSMutableArray *entries;
+@end
226 Classes/TumblrAPIOperation.m
@@ -0,0 +1,226 @@
+//
+// TumblrAPIOperation.m
+// Tumborine
+//
+// Created by Nobuo Danjou on 10/07/24.
+// Copyright 2010 株式会社ソフリット. All rights reserved.
+//
+
+#import "TumblrAPIOperation.h"
+#import "AnimatableImage.h"
+#import <libxml/tree.h>
+
+static xmlSAXHandler mySAXHandlerStruct;
+
+@implementation TumblrAPIOperation
+
+@synthesize entries = entries_;
+
+
+- (id)init {
+ self = [super init];
+ if (self != nil) {
+ finished_ = NO;
+ executing_ = NO;
+ }
+ return self;
+}
+
+- (void)dealloc {
+ [entries_ release];
+ [super dealloc];
+}
+
+- (BOOL)isConcurrent {
+ return YES;
+}
+
+- (BOOL)isFinished {
+ return finished_;
+}
+
+- (BOOL)isExecuting {
+ return executing_;
+}
+
+- (void)start {
+ NSLog(@"Operation start");
+ if ([self isCancelled]) {
+ return;
+ }
+ UIApplication *app = [UIApplication sharedApplication];
+ app.networkActivityIndicatorVisible = YES;
+
+ [NSThread detachNewThreadSelector:@selector(main) toTarget:self withObject:nil];
+ [self willChangeValueForKey:@"isExecuting"];
+ executing_ = YES;
+ [self didChangeValueForKey:@"isExecuting"];
+}
+
+- (void)main {
+ NSLog(@"thread main");
+ NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
+
+
+ NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://www.tumblr.com/api/dashboard"]];
+ [req setHTTPMethod:@"POST"];
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+ NSString *email = [defaults stringForKey:@"email"];
+ NSString *password = [defaults stringForKey:@"password"];
+
+ NSString *body = [NSString stringWithFormat:@"email=%@&password=%@&type=photo&num=3",
+ [email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
+ [password stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
+ ];
+ [req setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]];
+ NSLog(@"request start");
+ [[NSURLConnection alloc] initWithRequest:req delegate:self];
+ NSLog(@"request sent");
+
+ do {
+ [[NSRunLoop currentRunLoop]
+ runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]
+ ];
+ } while (![self isFinished]);
+ [pool release];
+
+}
+
+- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
+ NSLog(@"didReceiveResponse");
+ parser_ = xmlCreatePushParserCtxt(&mySAXHandlerStruct, self, NULL, 0, NULL);
+}
+
+- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
+ NSLog(@"didReceiveData");
+ xmlParseChunk(parser_, (const char *)[data bytes], [data length], 0);
+}
+
+- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
+ NSLog(@"connectionDidFinishLoading");
+ xmlParseChunk(parser_, NULL, 0, 1);
+}
+
+- (void)putChars:(NSString *)chars {
+ if ([entries_ count] > 0 && currentTag_ != nil) {
+ NSMutableDictionary *dict = [entries_ objectAtIndex:[entries_ count] - 1];
+ NSString *value = [dict valueForKey:currentTag_];
+ [dict setValue:[value stringByAppendingString:chars] forKey:currentTag_];
+ }
+}
+
+- (void)startElem:(NSString *)name withAttr:(NSMutableDictionary *)attr {
+ currentTag_ = name;
+ if ([name isEqualToString:@"posts"]) {
+ entries_ = [[NSMutableArray alloc] init];
+ } else if ([name isEqualToString:@"post"]) {
+ NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
+ [entries_ addObject:dict];
+ } else {
+ if ([name isEqualToString:@"photo-url"]){
+ if ([[attr valueForKey:@"max-width"] intValue] != 500) {
+ currentTag_ = nil;
+ return;
+ }
+ }
+ NSMutableDictionary *dict =[entries_ objectAtIndex:[entries_ count] - 1];
+ [dict setValue:@"" forKey:name];
+ }
+}
+
+- (void)endElem:(NSString *)name {
+ if ([currentTag_ isEqualToString:@"photo-url"]) {
+ NSMutableDictionary *dict = [entries_ objectAtIndex:[entries_ count] - 1];
+ NSURL *url = [NSURL URLWithString:[dict valueForKey:@"photo-url"]];
+ NSLog(@"%@", url);
+ [dict setObject:[[AnimatableImage alloc] initWithData:[NSData dataWithContentsOfURL:url]]
+ forKey:@"photo-url"];
+ }
+ if ([name isEqualToString:@"posts"]) {
+ [self willChangeValueForKey:@"isFinished"];
+ finished_ = YES;
+ [self didChangeValueForKey:@"isFinished"];
+
+ [self willChangeValueForKey:@"isExecuting"];
+ executing_ = NO;
+ [self didChangeValueForKey:@"isExecuting"];
+ UIApplication *app = [UIApplication sharedApplication];
+ app.networkActivityIndicatorVisible = NO;
+ }
+ currentTag_ = nil;
+}
+
+@end
+
+static void charactersFoundSAX(void *ctx, const xmlChar *ch, int len) {
+ TumblrAPIOperation *controller = (TumblrAPIOperation *)ctx;
+ NSString *chars = [[NSString alloc] initWithBytes:ch length:len encoding:NSUTF8StringEncoding];
+ [controller putChars:chars];
+}
+
+
+static void startElementSAX(void *ctx,
+ const xmlChar *localname,
+ const xmlChar *prefix,
+ const xmlChar *URI,
+ int nb_namespaces,
+ const xmlChar **namespaces,
+ int nb_attributes,
+ int nb_defaulted,
+ const xmlChar **attributes) {
+ TumblrAPIOperation *controller = (TumblrAPIOperation *)ctx;
+ NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
+ for (int i = 0; nb_attributes > i; i++) {
+ NSString *localname_attr = [[NSString alloc] initWithCString:(const char *)attributes[i * 5]];
+ const xmlChar *valueBegin = attributes[i*5 + 3];
+ const xmlChar *valueEnd = attributes[i*5 + 4];
+ NSString *value = [[NSString alloc] initWithBytes:valueBegin length:(valueEnd - valueBegin) encoding:NSUTF8StringEncoding];
+ [dict setValue:value forKey:localname_attr];
+ }
+ NSString *l = [[NSString alloc] initWithCString:(const char *)localname];
+ [controller startElem:l withAttr:dict];
+}
+
+static void endElementSAX(void *ctx,
+ const xmlChar *localname,
+ const xmlChar *prefix,
+ const xmlChar *URI) {
+ TumblrAPIOperation *controller = (TumblrAPIOperation *)ctx;
+ NSString *n = [[NSString alloc] initWithCString:(const char *)localname];
+ [controller endElem:n];
+}
+
+static xmlSAXHandler mySAXHandlerStruct = {
+ NULL, /* internalSubset */
+ NULL, /* isStandalone */
+ NULL, /* hasInternalSubset */
+ NULL, /* hasExternalSubset */
+ NULL, /* resolveEntity */
+ NULL, /* getEntity */
+ NULL, /* entityDecl */
+ NULL, /* notationDecl */
+ NULL, /* attributeDecl */
+ NULL, /* elementDecl */
+ NULL, /* unparsedEntityDecl */
+ NULL, /* setDocumentLocator */
+ NULL, /* startDocument */
+ NULL, /* endDocument */
+ NULL, /* startElement*/
+ NULL, /* endElement */
+ NULL, /* reference */
+ charactersFoundSAX, /* characters */
+ NULL, /* ignorableWhitespace */
+ NULL, /* processingInstruction */
+ NULL, /* comment */
+ NULL, /* warning */
+ NULL, /*errorEncounteredSAX, /* error */
+ NULL, /* fatalError //: unused error() get all the errors */
+ NULL, /* getParameterEntity */
+ NULL, /* cdataBlock */
+ NULL, /* externalSubset */
+ XML_SAX2_MAGIC, //
+ NULL,
+ startElementSAX, /* startElementNs */
+ endElementSAX, /* endElementNs */
+ NULL, /* serror */
+};
27 Classes/TumblrViewController.h
@@ -0,0 +1,27 @@
+//
+// TumblrViewController.h
+// Tumborine
+//
+// Created by Nobuo Danjou on 10/07/12.
+// Copyright 2010 株式会社ソフリット. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import <libxml/tree.h>
+#import "TumblrAPIOperation.h";
+#import "AnimatableImage.h";
+#import "AnimatableImageView.h";
+
+@interface TumblrViewController : UIViewController {
+ AnimatableImageView *imageview_;
+ NSString *currentTag;
+ NSMutableArray *entries_;
+ NSOperationQueue *queue_;
+ NSTimer *animationTimer_;
+}
+
+- (void)setimage:(AnimatableImage *)image;
+- (void)startOperation;
+- (void)stopOperation;
+
+@end
118 Classes/TumblrViewController.m
@@ -0,0 +1,118 @@
+ //
+// TumblrViewController.m
+// Tumborine
+//
+// Created by Nobuo Danjou on 10/07/12.
+// Copyright 2010 株式会社ソフリット. All rights reserved.
+//
+
+#import "TumblrViewController.h"
+#import <libxml/tree.h>
+
+@implementation TumblrViewController
+
+- (id)init {
+ self = [super init];
+ if (self != nil) {
+ queue_ = [[NSOperationQueue alloc] init];
+ }
+ return self;
+}
+
+- (void)viewDidLoad {
+ [super viewDidLoad];
+ imageview_ = [[AnimatableImageView alloc] initWithFrame:self.view.bounds];
+ [self.view addSubview:imageview_];
+
+ [self startOperation];
+}
+
+- (void)startOperation {
+ entries_ = [[NSMutableArray alloc] init];
+ TumblrAPIOperation *op = [[[TumblrAPIOperation alloc] init] autorelease];
+ [op addObserver:self forKeyPath:@"isFinished" options:NSKeyValueObservingOptionNew context:nil];
+ [queue_ addOperation:op];
+
+ NSString *path = [[NSBundle mainBundle] pathForResource:@"cat2" ofType:@"gif"];
+ AnimatableImage* image = [[AnimatableImage alloc] initWithData:[NSData dataWithContentsOfFile:path]];
+
+ [self setimage:image];
+}
+
+- (void)stopOperation {
+ imageview_.backgroundColor = [UIColor blackColor];
+ imageview_.image = nil;
+}
+
+- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
+ if ([entries_ count] > 0) {
+ NSMutableDictionary *dict = [entries_ objectAtIndex:0];
+ AnimatableImage *image = [dict objectForKey:@"photo-url"];
+ [self setimage:image];
+ [entries_ removeObjectAtIndex:0];
+ }
+}
+
+- (void)setimage:(AnimatableImage *)image {
+
+ CGSize size = image.size;
+
+ if (size.height < size.width) {
+ imageview_.bounds = CGRectMake(0,0,self.view.bounds.size.height, self.view.bounds.size.width);
+ imageview_.transform = CGAffineTransformMakeRotation(90 * (M_PI / 180.0));
+ } else {
+ imageview_.bounds = self.view.bounds;
+ imageview_.transform = CGAffineTransformMakeRotation(0);
+ }
+ imageview_.center = self.view.center;
+ imageview_.contentMode = UIViewContentModeScaleAspectFit;
+ imageview_.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
+ if (image.has_animation) {
+ imageview_.image = nil;
+ imageview_.animationImages = [image images];
+ [imageview_ animateGIF89a];
+ } else {
+ if ([imageview_ isAnimatingGIF89a]) {
+ [imageview_ stopAnimatingGIF89a];
+ imageview_.animationImages = nil;
+ }
+ imageview_.image = image;
+ }
+}
+
+- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
+ NSLog(@"key changed");
+ TumblrAPIOperation *op = (TumblrAPIOperation *)object;
+ [entries_ addObjectsFromArray:[op.entries copy]];
+ [object removeObserver:self forKeyPath:keyPath];
+}
+
+/*
+// Override to allow orientations other than the default portrait orientation.
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
+ // Return YES for supported orientations
+ return (interfaceOrientation == UIInterfaceOrientationPortrait);
+}
+*/
+
+- (void)didReceiveMemoryWarning {
+ // Releases the view if it doesn't have a superview.
+ [super didReceiveMemoryWarning];
+
+ // Release any cached data, images, etc that aren't in use.
+}
+
+- (void)viewDidUnload {
+ [super viewDidUnload];
+ // Release any retained subviews of the main view.
+ // e.g. self.myOutlet = nil;
+}
+
+- (void)dealloc {
+ [queue_ release];
+ [imageview_ release];
+ [entries_ release];
+ [super dealloc];
+}
+
+@end
20 Classes/TumborineAppDelegate.h
@@ -0,0 +1,20 @@
+//
+// TumborineAppDelegate.h
+// Tumborine
+//
+// Created by Nobuo Danjou on 10/07/12.
+// Copyright 株式会社ソフリット 2010. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "TumblrViewController.h";
+
+@interface TumborineAppDelegate : NSObject <UIApplicationDelegate> {
+ UIWindow *window;
+ TumblrViewController *tumblr;
+}
+
+@property (nonatomic, retain) UIWindow *window;
+
+@end
+
89 Classes/TumborineAppDelegate.m
@@ -0,0 +1,89 @@
+//
+// TumborineAppDelegate.m
+// Tumborine
+//
+// Created by Nobuo Danjou on 10/07/12.
+// Copyright 株式会社ソフリット 2010. All rights reserved.
+//
+
+#import "TumborineAppDelegate.h"
+
+@implementation TumborineAppDelegate
+
+@synthesize window;
+
+
+#pragma mark -
+#pragma mark Application lifecycle
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+
+ // Override point for customization after application launch.
+ CGRect rect = [[UIScreen mainScreen] bounds];
+ window = [[UIWindow alloc] initWithFrame:rect];
+
+ tumblr = [[TumblrViewController alloc] init];
+
+ [window addSubview:tumblr.view];
+ [window makeKeyAndVisible];
+ return YES;
+}
+
+
+- (void)applicationWillResignActive:(UIApplication *)application {
+ /*
+ Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
+ Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
+ */
+}
+
+
+- (void)applicationDidEnterBackground:(UIApplication *)application {
+ [tumblr stopOperation];
+ /*
+ Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
+ If your application supports background execution, called instead of applicationWillTerminate: when the user quits.
+ */
+}
+
+
+- (void)applicationWillEnterForeground:(UIApplication *)application {
+ [tumblr startOperation];
+ /*
+ Called as part of transition from the background to the inactive state: here you can undo many of the changes made on entering the background.
+ */
+}
+
+
+- (void)applicationDidBecomeActive:(UIApplication *)application {
+ /*
+ Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
+ */
+}
+
+
+- (void)applicationWillTerminate:(UIApplication *)application {
+ /*
+ Called when the application is about to terminate.
+ See also applicationDidEnterBackground:.
+ */
+}
+
+
+#pragma mark -
+#pragma mark Memory management
+
+- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
+ /*
+ Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later.
+ */
+}
+
+- (void)dealloc {
+ [tumblr release];
+ [window release];
+ [super dealloc];
+}
+
+
+@end
49 Settings.bundle/Root.plist
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>StringsTable</key>
+ <string>Tomborine</string>
+ <key>PreferenceSpecifiers</key>
+ <array>
+ <dict>
+ <key>Type</key>
+ <string>PSGroupSpecifier</string>
+ <key>Title</key>
+ <string>Account Settings</string>
+ </dict>
+ <dict>
+ <key>Type</key>
+ <string>PSTextFieldSpecifier</string>
+ <key>Title</key>
+ <string>Email</string>
+ <key>Key</key>
+ <string>email</string>
+ <key>DefaultValue</key>
+ <string></string>
+ <key>IsSecure</key>
+ <false/>
+ <key>KeyboardType</key>
+ <string>Email</string>
+ <key>AutocapitalizationType</key>
+ <string>None</string>
+ <key>AutocorrectionType</key>
+ <string>No</string>
+ </dict>
+ <dict>
+ <key>Type</key>
+ <string>PSTextFieldSpecifier</string>
+ <key>Title</key>
+ <string>Password</string>
+ <key>Key</key>
+ <string>password</string>
+ <key>DefaultValue</key>
+ <string></string>
+ <key>KeyboardType</key>
+ <string>Alphabet</string>
+ <key>IsSecure</key>
+ <true/>
+ </dict>
+ </array>
+</dict>
+</plist>
BIN Settings.bundle/en.lproj/Root.strings
Binary file not shown.
28 Tumborine-Info.plist
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleDisplayName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIconFile</key>
+ <string></string>
+ <key>CFBundleIdentifier</key>
+ <string>com.yourcompany.${PRODUCT_NAME:rfc1034identifier}</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+</dict>
+</plist>
293 Tumborine.xcodeproj/project.pbxproj
@@ -0,0 +1,293 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 45;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 1D3623260D0F684500981E51 /* TumborineAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* TumborineAppDelegate.m */; };
+ 1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
+ 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };
+ 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; };
+ 288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765FC0DF74451002DB57D /* CoreGraphics.framework */; };
+ 7B176D69120C378700481240 /* cat2.gif in Resources */ = {isa = PBXBuildFile; fileRef = 7B176D68120C378700481240 /* cat2.gif */; };
+ 7B21EB1C120D88E6003A66A8 /* AnimatableImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B21EB1B120D88E6003A66A8 /* AnimatableImageView.m */; };
+ 7B3F1B3611EAB08800FF241E /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 7B3F1B3511EAB08800FF241E /* Settings.bundle */; };
+ 7B3F1B5C11EABA0100FF241E /* TumblrViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B3F1B5B11EABA0100FF241E /* TumblrViewController.m */; };
+ 7B3F1B7411EABD5700FF241E /* logo.png in Resources */ = {isa = PBXBuildFile; fileRef = 7B3F1B7311EABD5700FF241E /* logo.png */; };
+ 7B4E455411FA6F0D00EA587B /* TumblrAPIOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B4E455311FA6F0D00EA587B /* TumblrAPIOperation.m */; };
+ 7B57094411FBFABB003F19C4 /* AnimatableImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B57094311FBFABB003F19C4 /* AnimatableImage.m */; };
+ 7BE8D12A11EFF724001289A6 /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 7BE8D12911EFF724001289A6 /* libxml2.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ 1D3623240D0F684500981E51 /* TumborineAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TumborineAppDelegate.h; sourceTree = "<group>"; };
+ 1D3623250D0F684500981E51 /* TumborineAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TumborineAppDelegate.m; sourceTree = "<group>"; };
+ 1D6058910D05DD3D006BFB54 /* Tumborine.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Tumborine.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+ 288765FC0DF74451002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+ 32CA4F630368D1EE00C91783 /* Tumborine_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tumborine_Prefix.pch; sourceTree = "<group>"; };
+ 7B176D68120C378700481240 /* cat2.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = cat2.gif; sourceTree = "<group>"; };
+ 7B21EB1A120D88E6003A66A8 /* AnimatableImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimatableImageView.h; sourceTree = "<group>"; };
+ 7B21EB1B120D88E6003A66A8 /* AnimatableImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AnimatableImageView.m; sourceTree = "<group>"; };
+ 7B3F1B3511EAB08800FF241E /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = "<group>"; };
+ 7B3F1B5A11EABA0100FF241E /* TumblrViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TumblrViewController.h; sourceTree = "<group>"; };
+ 7B3F1B5B11EABA0100FF241E /* TumblrViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TumblrViewController.m; sourceTree = "<group>"; };
+ 7B3F1B7311EABD5700FF241E /* logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo.png; sourceTree = "<group>"; };
+ 7B4E455211FA6F0D00EA587B /* TumblrAPIOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TumblrAPIOperation.h; sourceTree = "<group>"; };
+ 7B4E455311FA6F0D00EA587B /* TumblrAPIOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TumblrAPIOperation.m; sourceTree = "<group>"; };
+ 7B57094211FBFABB003F19C4 /* AnimatableImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimatableImage.h; sourceTree = "<group>"; };
+ 7B57094311FBFABB003F19C4 /* AnimatableImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AnimatableImage.m; sourceTree = "<group>"; };
+ 7BE8D12911EFF724001289A6 /* libxml2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxml2.dylib; path = usr/lib/libxml2.dylib; sourceTree = SDKROOT; };
+ 8D1107310486CEB800E47090 /* Tumborine-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Tumborine-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 1D60588F0D05DD3D006BFB54 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */,
+ 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */,
+ 288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */,
+ 7BE8D12A11EFF724001289A6 /* libxml2.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 080E96DDFE201D6D7F000001 /* Classes */ = {
+ isa = PBXGroup;
+ children = (
+ 7B21EB1A120D88E6003A66A8 /* AnimatableImageView.h */,
+ 7B21EB1B120D88E6003A66A8 /* AnimatableImageView.m */,
+ 7B57094211FBFABB003F19C4 /* AnimatableImage.h */,
+ 7B57094311FBFABB003F19C4 /* AnimatableImage.m */,
+ 7B4E455211FA6F0D00EA587B /* TumblrAPIOperation.h */,
+ 7B4E455311FA6F0D00EA587B /* TumblrAPIOperation.m */,
+ 7B3F1B5A11EABA0100FF241E /* TumblrViewController.h */,
+ 7B3F1B5B11EABA0100FF241E /* TumblrViewController.m */,
+ 1D3623240D0F684500981E51 /* TumborineAppDelegate.h */,
+ 1D3623250D0F684500981E51 /* TumborineAppDelegate.m */,
+ );
+ path = Classes;
+ sourceTree = "<group>";
+ };
+ 19C28FACFE9D520D11CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 1D6058910D05DD3D006BFB54 /* Tumborine.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
+ isa = PBXGroup;
+ children = (
+ 080E96DDFE201D6D7F000001 /* Classes */,
+ 29B97315FDCFA39411CA2CEA /* Other Sources */,
+ 29B97317FDCFA39411CA2CEA /* Resources */,
+ 29B97323FDCFA39411CA2CEA /* Frameworks */,
+ 19C28FACFE9D520D11CA2CBB /* Products */,
+ );
+ name = CustomTemplate;
+ sourceTree = "<group>";
+ };
+ 29B97315FDCFA39411CA2CEA /* Other Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 32CA4F630368D1EE00C91783 /* Tumborine_Prefix.pch */,
+ 29B97316FDCFA39411CA2CEA /* main.m */,
+ );
+ name = "Other Sources";
+ sourceTree = "<group>";
+ };
+ 29B97317FDCFA39411CA2CEA /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ 7B176D68120C378700481240 /* cat2.gif */,
+ 7B3F1B7311EABD5700FF241E /* logo.png */,
+ 7B3F1B3511EAB08800FF241E /* Settings.bundle */,
+ 8D1107310486CEB800E47090 /* Tumborine-Info.plist */,
+ );
+ name = Resources;
+ sourceTree = "<group>";
+ };
+ 29B97323FDCFA39411CA2CEA /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 7BE8D12911EFF724001289A6 /* libxml2.dylib */,
+ 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */,
+ 1D30AB110D05D00D00671497 /* Foundation.framework */,
+ 288765FC0DF74451002DB57D /* CoreGraphics.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 1D6058900D05DD3D006BFB54 /* Tumborine */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "Tumborine" */;
+ buildPhases = (
+ 1D60588D0D05DD3D006BFB54 /* Resources */,
+ 1D60588E0D05DD3D006BFB54 /* Sources */,
+ 1D60588F0D05DD3D006BFB54 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Tumborine;
+ productName = Tumborine;
+ productReference = 1D6058910D05DD3D006BFB54 /* Tumborine.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 29B97313FDCFA39411CA2CEA /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Tumborine" */;
+ compatibilityVersion = "Xcode 3.1";
+ hasScannedForEncodings = 1;
+ mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 1D6058900D05DD3D006BFB54 /* Tumborine */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 1D60588D0D05DD3D006BFB54 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 7B3F1B3611EAB08800FF241E /* Settings.bundle in Resources */,
+ 7B3F1B7411EABD5700FF241E /* logo.png in Resources */,
+ 7B176D69120C378700481240 /* cat2.gif in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 1D60588E0D05DD3D006BFB54 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 1D60589B0D05DD56006BFB54 /* main.m in Sources */,
+ 1D3623260D0F684500981E51 /* TumborineAppDelegate.m in Sources */,
+ 7B3F1B5C11EABA0100FF241E /* TumblrViewController.m in Sources */,
+ 7B4E455411FA6F0D00EA587B /* TumblrAPIOperation.m in Sources */,
+ 7B57094411FBFABB003F19C4 /* AnimatableImage.m in Sources */,
+ 7B21EB1C120D88E6003A66A8 /* AnimatableImageView.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 1D6058940D05DD3E006BFB54 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = Tumborine_Prefix.pch;
+ INFOPLIST_FILE = "Tumborine-Info.plist";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/Classes/OAuthConsumer\"",
+ "\"$(SRCROOT)/OAuthConsumer\"",
+ "\"$(SRCROOT)/Classes/Libraries & Headers/OAuthConsumer\"",
+ );
+ PRODUCT_NAME = Tumborine;
+ };
+ name = Debug;
+ };
+ 1D6058950D05DD3E006BFB54 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = YES;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = Tumborine_Prefix.pch;
+ INFOPLIST_FILE = "Tumborine-Info.plist";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/Classes/OAuthConsumer\"",
+ "\"$(SRCROOT)/OAuthConsumer\"",
+ "\"$(SRCROOT)/Classes/Libraries & Headers/OAuthConsumer\"",
+ );
+ PRODUCT_NAME = Tumborine;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ C01FCF4F08A954540054247B /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ GCC_C_LANGUAGE_STANDARD = c99;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = $SDKROOT/usr/include/libxml2;
+ IPHONEOS_DEPLOYMENT_TARGET = 4.0;
+ PREBINDING = NO;
+ SDKROOT = iphoneos4.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALID_ARCHS = "armv6 armv7";
+ };
+ name = Debug;
+ };
+ C01FCF5008A954540054247B /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ GCC_C_LANGUAGE_STANDARD = c99;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
+ PREBINDING = NO;
+ SDKROOT = iphonesimulator3.2;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "Tumborine" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1D6058940D05DD3E006BFB54 /* Debug */,
+ 1D6058950D05DD3E006BFB54 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Tumborine" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C01FCF4F08A954540054247B /* Debug */,
+ C01FCF5008A954540054247B /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
+}
8 Tumborine_Prefix.pch
@@ -0,0 +1,8 @@
+//
+// Prefix header for all source files of the 'Tumborine' target in the 'Tumborine' project
+//
+
+#ifdef __OBJC__
+ #import <Foundation/Foundation.h>
+ #import <UIKit/UIKit.h>
+#endif
BIN cat2.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN logo.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
17 main.m
@@ -0,0 +1,17 @@
+//
+// main.m
+// Tumborine
+//
+// Created by Nobuo Danjou on 10/07/12.
+// Copyright 株式会社ソフリット 2010. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+int main(int argc, char *argv[]) {
+
+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
+ int retVal = UIApplicationMain(argc, argv, nil, @"TumborineAppDelegate");
+ [pool release];
+ return retVal;
+}

0 comments on commit 6673159

Please sign in to comment.
Something went wrong with that request. Please try again.