├── SvImgeInfo ├── SvImgeInfo │ ├── en.lproj │ │ ├── InfoPlist.strings │ │ ├── SvImageInfoViewController_iPad.xib │ │ └── SvImageInfoViewController_iPhone.xib │ ├── DSC02039.JPG │ ├── Default.png │ ├── Default@2x.png │ ├── Default-568h@2x.png │ ├── SvImageInfoViewController.h │ ├── SvImgeInfo-Prefix.pch │ ├── main.m │ ├── SvImageInfoAppDelegate.h │ ├── SvImgeInfo-Info.plist │ ├── SvImageInfoViewController.m │ └── SvImageInfoAppDelegate.m ├── SvImageInfoUtil │ ├── SvImageInfoEditUtils.h │ ├── SvImageInfoUtils.h │ ├── SvImageInfoUtils.m │ └── SvImageInfoEditUtils.m └── SvImgeInfo.xcodeproj │ └── project.pbxproj ├── README.md └── .gitignore /SvImgeInfo/SvImgeInfo/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | SvImageInfo 2 | =========== 3 | 4 | Obtain and manipulate image info with ImageIO framework 5 | -------------------------------------------------------------------------------- /SvImgeInfo/SvImgeInfo/DSC02039.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smileEvday/SvImageInfo/HEAD/SvImgeInfo/SvImgeInfo/DSC02039.JPG -------------------------------------------------------------------------------- /SvImgeInfo/SvImgeInfo/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smileEvday/SvImageInfo/HEAD/SvImgeInfo/SvImgeInfo/Default.png -------------------------------------------------------------------------------- /SvImgeInfo/SvImgeInfo/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smileEvday/SvImageInfo/HEAD/SvImgeInfo/SvImgeInfo/Default@2x.png -------------------------------------------------------------------------------- /SvImgeInfo/SvImgeInfo/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smileEvday/SvImageInfo/HEAD/SvImgeInfo/SvImgeInfo/Default-568h@2x.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | .DS_Store 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | *.xcworkspace 13 | !default.xcworkspace 14 | xcuserdata 15 | profile 16 | *.moved-aside 17 | DerivedData 18 | .idea/ 19 | -------------------------------------------------------------------------------- /SvImgeInfo/SvImgeInfo/SvImageInfoViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SvImageInfoViewController.h 3 | // SvImgeInfo 4 | // 5 | // Created by maple on 6/17/13. 6 | // Copyright (c) 2013 maple. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface SvImageInfoViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /SvImgeInfo/SvImgeInfo/SvImgeInfo-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'SvImgeInfo' target in the 'SvImgeInfo' project 3 | // 4 | 5 | #import 6 | 7 | #ifndef __IPHONE_4_0 8 | #warning "This project uses features only available in iOS SDK 4.0 and later." 9 | #endif 10 | 11 | #ifdef __OBJC__ 12 | #import 13 | #import 14 | #endif 15 | -------------------------------------------------------------------------------- /SvImgeInfo/SvImgeInfo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // SvImgeInfo 4 | // 5 | // Created by maple on 6/17/13. 6 | // Copyright (c) 2013 maple. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "SvImageInfoAppDelegate.h" 12 | 13 | int main(int argc, char *argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([SvImageInfoAppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /SvImgeInfo/SvImgeInfo/SvImageInfoAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // SvImageInfoAppDelegate.h 3 | // SvImgeInfo 4 | // 5 | // Created by maple on 6/17/13. 6 | // Copyright (c) 2013 maple. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class SvImageInfoViewController; 12 | 13 | @interface SvImageInfoAppDelegate : UIResponder 14 | 15 | @property (strong, nonatomic) UIWindow *window; 16 | 17 | @property (strong, nonatomic) SvImageInfoViewController *viewController; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /SvImgeInfo/SvImageInfoUtil/SvImageInfoEditUtils.h: -------------------------------------------------------------------------------- 1 | // 2 | // SvImageInfoEditUtils.h 3 | // SvImgeInfo 4 | // 5 | // Created by maple on 6/19/13. 6 | // Copyright (c) 2013 maple. All rights reserved. 7 | // 8 | // the util class to modify image info 9 | 10 | #import "SvImageInfoUtils.h" 11 | 12 | @interface SvImageInfoEditUtils : SvImageInfoUtils 13 | 14 | /* 15 | * @brief set image's orientation 16 | */ 17 | - (void)setImageOrientation:(ExifOrientation)newOrientation; 18 | 19 | /* 20 | * @brief save modify to image file 21 | */ 22 | - (void)save; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /SvImgeInfo/SvImgeInfo/SvImgeInfo-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | smileEvday.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /SvImgeInfo/SvImgeInfo/SvImageInfoViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SvImageInfoViewController.m 3 | // SvImgeInfo 4 | // 5 | // Created by maple on 6/17/13. 6 | // Copyright (c) 2013 maple. All rights reserved. 7 | // 8 | 9 | #import "SvImageInfoViewController.h" 10 | #import "SvImageInfoUtils.h" 11 | #import "SvImageInfoEditUtils.h" 12 | 13 | @interface SvImageInfoViewController () 14 | 15 | @end 16 | 17 | @implementation SvImageInfoViewController 18 | 19 | - (void)viewDidLoad 20 | { 21 | [super viewDidLoad]; 22 | // Do any additional setup after loading the view, typically from a nib. 23 | 24 | UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 25 | btn.frame = CGRectMake(0, 0, 140, 60); 26 | btn.center = CGPointMake(self.view.bounds.size.width / 2, self.view.bounds.size.height / 2); 27 | [btn setTitle:@"Load Image" forState:UIControlStateNormal]; 28 | [btn addTarget:self action:@selector(loadImage:) forControlEvents:UIControlEventTouchUpInside]; 29 | [self.view addSubview:btn]; 30 | } 31 | 32 | - (void)didReceiveMemoryWarning 33 | { 34 | [super didReceiveMemoryWarning]; 35 | // Dispose of any resources that can be recreated. 36 | } 37 | 38 | - (void)loadImage:(UIButton*)btn 39 | { 40 | UIImage *image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/Documents/DSC02040.JPG", NSHomeDirectory()]]; 41 | 42 | NSLog(@"%f %f %f %d", image.size.width, image.size.height, image.scale, image.imageOrientation); 43 | 44 | CGImageRef imageRef = image.CGImage; 45 | NSLog(@"%zd %zd", CGImageGetWidth(imageRef), CGImageGetHeight(imageRef)); 46 | 47 | UIImageView *imageV = [[UIImageView alloc] initWithFrame:self.view.bounds]; 48 | imageV.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 49 | imageV.backgroundColor = [UIColor redColor]; 50 | imageV.image = image; 51 | imageV.contentMode = UIViewContentModeScaleAspectFit; 52 | [self.view addSubview:imageV]; 53 | [imageV release]; 54 | 55 | UIImageWriteToSavedPhotosAlbum(imageV.image, nil, nil, nil); 56 | } 57 | 58 | @end 59 | -------------------------------------------------------------------------------- /SvImgeInfo/SvImageInfoUtil/SvImageInfoUtils.h: -------------------------------------------------------------------------------- 1 | // 2 | // SvImageInfoUtils.h 3 | // SvImgeInfo 4 | // 5 | // Created by maple on 6/19/13. 6 | // Copyright (c) 2013 maple. All rights reserved. 7 | // 8 | // The util class to obtain image's exif info 9 | 10 | #import 11 | #import 12 | 13 | // http://www.impulseadventure.com/photo/exif-orientation.html 14 | // Virtually all Canon and Nikon digital cameras have an orientation sensor. 15 | // The output of this sensor is used to set the EXIF orientation flag in the image file's metatdata 16 | // to reflect the positioning of the camera with respect to the ground. Canon calls their 17 | // sensor the "Intelligent Orientation" sensor. It is presumably a 2-axis tilt sensor, 18 | // allowing 4 possible orientations to be detected (shown in the left side of the diagram below). 19 | // Note that one would only expect the four orientation settings shown on the left to be 20 | // possible with a digital camera. The other four settings would imply that the 21 | // resulting image was flipped horizontally before recording. Unless the camera were to 22 | // encode the image right-to-left or know that you were taking a photo in a mirror, 23 | // I don't see how these values will ever be used. 24 | 25 | 26 | enum { 27 | exifOrientationUp = 1, // UIImageOrientationUp 28 | exifOrientationDown = 3, // UIImageOrientationDown 29 | exifOrientationLeft = 6, // UIImageOrientationLeft 30 | exifOrientationRight = 8, // UIImageOrientationRight 31 | 32 | // these four exifOrientation does not support by all camera, but IOS support these orientation 33 | exifOrientationUpMirrored = 2, // UIImageOrientationUpMirrored 34 | exifOrientationDownMirrored = 4, // UIImageOrientationDownMirrored 35 | exifOrientationLeftMirrored = 5, // UIImageOrientationLeftMirrored 36 | exifOrientationRightMirrored = 7, // UIImageOrientationRightMirrored 37 | }; 38 | typedef NSInteger ExifOrientation; 39 | 40 | 41 | @interface SvImageInfoUtils : NSObject { 42 | CGImageSourceRef _imageRef; 43 | } 44 | 45 | - (id)initWithURL:(NSURL*)imageUrl; 46 | 47 | /* 48 | * @brief get filesize info 49 | */ 50 | - (NSInteger)fileSize; 51 | 52 | /* 53 | * @brief get user-readable type description 54 | */ 55 | - (NSString*)fileType; 56 | 57 | /* 58 | * @brief 59 | */ 60 | - (int)colorDepth; 61 | 62 | /* 63 | * @brief get image's colorspacemodel 64 | */ 65 | - (NSString*)colorModel; 66 | 67 | /* 68 | * @brief get image's orientation 69 | */ 70 | - (UIImageOrientation)imageOrientation; 71 | 72 | 73 | - (int)dpiWidth; 74 | - (int)dpiHeight; 75 | - (int)pixelWidth; 76 | - (int)pixelHeight; 77 | 78 | /* 79 | * @brief get the tiff dictionary about image 80 | */ 81 | - (NSDictionary*)tiffDictonary; 82 | 83 | /* 84 | * @brief get the exif dictionary about image 85 | */ 86 | - (NSDictionary*)exifDictionary; 87 | 88 | @end 89 | -------------------------------------------------------------------------------- /SvImgeInfo/SvImageInfoUtil/SvImageInfoUtils.m: -------------------------------------------------------------------------------- 1 | // 2 | // SvImageInfoUtils.m 3 | // SvImgeInfo 4 | // 5 | // Created by maple on 6/19/13. 6 | // Copyright (c) 2013 maple. All rights reserved. 7 | // 8 | 9 | 10 | #import "SvImageInfoUtils.h" 11 | #import 12 | 13 | @interface SvImageInfoUtils () { 14 | NSDictionary *_imageProperty; 15 | } 16 | 17 | @end 18 | 19 | @implementation SvImageInfoUtils 20 | 21 | - (id)initWithURL:(NSURL*)imageUrl 22 | { 23 | self = [super init]; 24 | if (self) { 25 | _imageRef = CGImageSourceCreateWithURL((CFURLRef)imageUrl, NULL); 26 | _imageProperty = (NSDictionary*)CGImageSourceCopyPropertiesAtIndex(_imageRef, 0, NULL); 27 | 28 | NSLog(@"image property: %@", _imageProperty); 29 | } 30 | 31 | return self; 32 | } 33 | 34 | - (void)dealloc 35 | { 36 | if (_imageRef != NULL) { 37 | CFRelease(_imageRef); 38 | } 39 | 40 | [_imageProperty release]; 41 | 42 | [super dealloc]; 43 | } 44 | 45 | - (NSInteger)fileSize 46 | { 47 | CFDictionaryRef dict = CGImageSourceCopyProperties(_imageRef, NULL); 48 | CFNumberRef fileSize = (CFNumberRef)CFDictionaryGetValue(dict, kCGImagePropertyFileSize); 49 | 50 | CFNumberType type = CFNumberGetType(fileSize); 51 | 52 | int size = 0; 53 | if (type == kCFNumberSInt32Type) { 54 | CFNumberGetValue(fileSize, type, &size); 55 | } 56 | 57 | CFRelease(dict); 58 | 59 | return 0; 60 | } 61 | 62 | - (NSString*)fileType 63 | { 64 | CFStringRef fileUTI = CGImageSourceGetType(_imageRef); 65 | NSLog(@"type Ref: %@", fileUTI); 66 | 67 | CFStringRef fileTypeDes = UTTypeCopyDescription(fileUTI); 68 | NSString *typeRef = (NSString*)fileTypeDes; 69 | [typeRef retain]; 70 | 71 | CFRelease(fileTypeDes); 72 | return [typeRef autorelease]; 73 | } 74 | 75 | - (int)colorDepth 76 | { 77 | return [[_imageProperty valueForKey:(NSString*)kCGImagePropertyDepth] intValue]; 78 | } 79 | 80 | - (NSString*)colorModel 81 | { 82 | return [_imageProperty valueForKey:(NSString*)kCGImagePropertyColorModel]; 83 | } 84 | 85 | - (UIImageOrientation)imageOrientation 86 | { 87 | return [[_imageProperty valueForKey:(NSString*)kCGImagePropertyOrientation] intValue]; 88 | } 89 | 90 | - (int)dpiWidth 91 | { 92 | return [[_imageProperty valueForKey:(NSString*)kCGImagePropertyDPIWidth] intValue]; 93 | } 94 | 95 | - (int)dpiHeight 96 | { 97 | return [[_imageProperty valueForKey:(NSString*)kCGImagePropertyDPIHeight] intValue]; 98 | } 99 | 100 | - (int)pixelWidth 101 | { 102 | return [[_imageProperty valueForKey:(NSString*)kCGImagePropertyPixelWidth] intValue]; 103 | } 104 | 105 | - (int)pixelHeight 106 | { 107 | return [[_imageProperty valueForKey:(NSString*)kCGImagePropertyPixelHeight] intValue]; 108 | } 109 | 110 | - (NSDictionary*)tiffDictonary 111 | { 112 | return [_imageProperty valueForKey:(NSString*)kCGImagePropertyTIFFDictionary]; 113 | } 114 | 115 | - (NSDictionary*)exifDictionary 116 | { 117 | return [_imageProperty valueForKey:(NSString*)kCGImagePropertyExifDictionary]; 118 | } 119 | 120 | @end 121 | -------------------------------------------------------------------------------- /SvImgeInfo/SvImgeInfo/SvImageInfoAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // SvImageInfoAppDelegate.m 3 | // SvImgeInfo 4 | // 5 | // Created by maple on 6/17/13. 6 | // Copyright (c) 2013 maple. All rights reserved. 7 | // 8 | 9 | #import "SvImageInfoAppDelegate.h" 10 | 11 | #import "SvImageInfoViewController.h" 12 | #import "SvImageInfoEditUtils.h" 13 | 14 | @implementation SvImageInfoAppDelegate 15 | 16 | - (void)dealloc 17 | { 18 | [_window release]; 19 | [_viewController release]; 20 | [super dealloc]; 21 | } 22 | 23 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 24 | { 25 | self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 26 | // Override point for customization after application launch. 27 | if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 28 | self.viewController = [[[SvImageInfoViewController alloc] initWithNibName:@"SvImageInfoViewController_iPhone" bundle:nil] autorelease]; 29 | } else { 30 | self.viewController = [[[SvImageInfoViewController alloc] initWithNibName:@"SvImageInfoViewController_iPad" bundle:nil] autorelease]; 31 | } 32 | self.window.rootViewController = self.viewController; 33 | [self.window makeKeyAndVisible]; 34 | 35 | 36 | NSURL *fileUrl = [[NSBundle mainBundle] URLForResource:@"DSC02039" withExtension:@"JPG"]; 37 | 38 | NSLog(@"%@", NSHomeDirectory()); 39 | 40 | SvImageInfoEditUtils *editUtils = [[SvImageInfoEditUtils alloc] initWithURL:fileUrl]; 41 | [editUtils setImageOrientation:exifOrientationLeft]; 42 | [editUtils release]; 43 | 44 | fileUrl = [[NSURL alloc] initFileURLWithPath:[NSString stringWithFormat:@"%@/Documents/DSC02040.JPG", NSHomeDirectory()]]; 45 | SvImageInfoUtils *imageInfoUtils = [[SvImageInfoUtils alloc] initWithURL:fileUrl]; 46 | 47 | NSLog(@"image size: %d", [imageInfoUtils fileSize]); 48 | NSLog(@"image type: %@", [imageInfoUtils fileType]); 49 | NSLog(@"image exif info: %@", [imageInfoUtils exifDictionary]); 50 | NSLog(@"image tiff info: %@", [imageInfoUtils tiffDictonary]); 51 | 52 | [imageInfoUtils release]; 53 | 54 | return YES; 55 | } 56 | 57 | - (void)applicationWillResignActive:(UIApplication *)application 58 | { 59 | // 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. 60 | // 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. 61 | } 62 | 63 | - (void)applicationDidEnterBackground:(UIApplication *)application 64 | { 65 | // 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. 66 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 67 | } 68 | 69 | - (void)applicationWillEnterForeground:(UIApplication *)application 70 | { 71 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 72 | } 73 | 74 | - (void)applicationDidBecomeActive:(UIApplication *)application 75 | { 76 | // 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. 77 | } 78 | 79 | - (void)applicationWillTerminate:(UIApplication *)application 80 | { 81 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 82 | } 83 | 84 | @end 85 | -------------------------------------------------------------------------------- /SvImgeInfo/SvImageInfoUtil/SvImageInfoEditUtils.m: -------------------------------------------------------------------------------- 1 | // 2 | // SvImageInfoEditUtils.m 3 | // SvImgeInfo 4 | // 5 | // Created by maple on 6/19/13. 6 | // Copyright (c) 2013 maple. All rights reserved. 7 | // 8 | 9 | #import "SvImageInfoEditUtils.h" 10 | 11 | @interface SvImageInfoEditUtils () { 12 | CGImageDestinationRef _imageDestination; 13 | NSInteger _newImageOrientation; 14 | } 15 | 16 | @end 17 | 18 | @implementation SvImageInfoEditUtils 19 | 20 | - (id)initWithURL:(NSURL *)imageUrl 21 | { 22 | self = [super initWithURL:imageUrl]; 23 | if (self) { 24 | CFStringRef imagUTI = CGImageSourceGetType(_imageRef); 25 | 26 | NSURL *newFileUrl = [[NSURL alloc] initFileURLWithPath:[NSString stringWithFormat:@"%@/Documents/DSC02040.JPG", NSHomeDirectory()]]; 27 | _imageDestination = CGImageDestinationCreateWithURL((CFURLRef)newFileUrl, imagUTI, 1, NULL); 28 | 29 | _newImageOrientation = -1; // never set orientation 30 | } 31 | 32 | return self; 33 | } 34 | 35 | - (void)dealloc 36 | { 37 | if (_imageDestination != NULL) { 38 | [self save]; 39 | CFRelease(_imageDestination); 40 | } 41 | 42 | [super dealloc]; 43 | } 44 | 45 | - (void)setImageOrientation:(ExifOrientation)newOrientation 46 | { 47 | _newImageOrientation = newOrientation; 48 | } 49 | 50 | - (void)save 51 | { 52 | NSDictionary *dict = (NSDictionary*)CGImageSourceCopyPropertiesAtIndex(_imageRef, 0, NULL); 53 | NSMutableDictionary *dictInfo = [NSMutableDictionary dictionaryWithDictionary:dict]; 54 | 55 | // modify dict before add 56 | 57 | NSInteger currentOrientation = [[dict valueForKey:(NSString*)kCGImagePropertyOrientation] intValue]; 58 | 59 | // if the new Orientation has changed, we should exchange width and height 60 | if (_newImageOrientation != -1 && currentOrientation != _newImageOrientation) { 61 | 62 | NSInteger pixelWidth = [[dict valueForKey:(NSString*)kCGImagePropertyPixelWidth] intValue]; 63 | NSInteger pixelHeight = [[dict valueForKey:(NSString*)kCGImagePropertyPixelHeight] intValue]; 64 | NSMutableDictionary *exifDictInfo = [NSMutableDictionary dictionaryWithDictionary:[dictInfo valueForKey:(NSString *)kCGImagePropertyExifDictionary]]; 65 | 66 | if ((currentOrientation == exifOrientationUp || currentOrientation == exifOrientationUpMirrored 67 | || currentOrientation == exifOrientationDown || currentOrientation == exifOrientationDownMirrored)) { 68 | if (_newImageOrientation == exifOrientationUp 69 | || _newImageOrientation == exifOrientationUpMirrored 70 | || _newImageOrientation == exifOrientationDown 71 | || _newImageOrientation == exifOrientationDownMirrored) { 72 | // need not exchange width and height 73 | } 74 | else { 75 | [dictInfo setValue:[NSNumber numberWithInteger:pixelHeight] forKey:(NSString*)kCGImagePropertyPixelWidth]; 76 | [dictInfo setValue:[NSNumber numberWithInteger:pixelWidth] forKey:(NSString*)kCGImagePropertyPixelHeight]; 77 | 78 | [exifDictInfo setValue:[NSNumber numberWithInteger:pixelHeight] forKey:(NSString*)kCGImagePropertyExifPixelXDimension]; 79 | [exifDictInfo setValue:[NSNumber numberWithInteger:pixelWidth] forKey:(NSString*)kCGImagePropertyExifPixelYDimension]; 80 | } 81 | } 82 | else if ((currentOrientation == exifOrientationLeft || currentOrientation == exifOrientationLeftMirrored 83 | || currentOrientation == exifOrientationRight || currentOrientation == exifOrientationRightMirrored)) { 84 | if (_newImageOrientation == exifOrientationLeft 85 | || _newImageOrientation == exifOrientationLeftMirrored 86 | || _newImageOrientation == exifOrientationRight 87 | || _newImageOrientation == exifOrientationRightMirrored) { 88 | // need not exchange width and height 89 | } 90 | else { 91 | [dictInfo setValue:[NSNumber numberWithInteger:pixelHeight] forKey:(NSString*)kCGImagePropertyPixelWidth]; 92 | [dictInfo setValue:[NSNumber numberWithInteger:pixelWidth] forKey:(NSString*)kCGImagePropertyPixelHeight]; 93 | 94 | [exifDictInfo setValue:[NSNumber numberWithInteger:pixelHeight] forKey:(NSString*)kCGImagePropertyExifPixelXDimension]; 95 | [exifDictInfo setValue:[NSNumber numberWithInteger:pixelWidth] forKey:(NSString*)kCGImagePropertyExifPixelYDimension]; 96 | } 97 | } 98 | 99 | // modify orientation 100 | [dictInfo setValue:[NSNumber numberWithInteger:_newImageOrientation]forKey:(NSString*)kCGImagePropertyOrientation]; 101 | [dictInfo setValue:exifDictInfo forKey:(NSString*)kCGImagePropertyExifDictionary]; 102 | } 103 | 104 | CGImageDestinationAddImageFromSource(_imageDestination, _imageRef, 0, (CFDictionaryRef)dictInfo); 105 | CGImageDestinationFinalize(_imageDestination); 106 | } 107 | 108 | @end 109 | -------------------------------------------------------------------------------- /SvImgeInfo/SvImgeInfo/en.lproj/SvImageInfoViewController_iPad.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1536 5 | 12A206j 6 | 2519 7 | 1172.1 8 | 613.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 1856 12 | 13 | 14 | IBProxyObject 15 | IBUIView 16 | 17 | 18 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 19 | 20 | 21 | PluginDependencyRecalculationVersion 22 | 23 | 24 | 25 | 26 | IBFilesOwner 27 | IBIPadFramework 28 | 29 | 30 | IBFirstResponder 31 | IBIPadFramework 32 | 33 | 34 | 35 | 274 36 | {{0, 20}, {768, 1004}} 37 | 38 | 39 | 40 | 3 41 | MQA 42 | 43 | 2 44 | 45 | 46 | 47 | 2 48 | 49 | IBIPadFramework 50 | 51 | 52 | 53 | 54 | 55 | 56 | view 57 | 58 | 59 | 60 | 3 61 | 62 | 63 | 64 | 65 | 66 | 0 67 | 68 | 69 | 70 | 71 | 72 | -1 73 | 74 | 75 | File's Owner 76 | 77 | 78 | -2 79 | 80 | 81 | 82 | 83 | 2 84 | 85 | 86 | 87 | 88 | 89 | 90 | SvImageInfoViewController 91 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 92 | UIResponder 93 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 94 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 95 | 96 | 97 | 98 | 99 | 100 | 3 101 | 102 | 103 | 104 | 105 | SvImageInfoViewController 106 | UIViewController 107 | 108 | IBProjectSource 109 | ./Classes/SvImageInfoViewController.h 110 | 111 | 112 | 113 | 114 | 0 115 | IBIPadFramework 116 | YES 117 | 3 118 | YES 119 | 1856 120 | 121 | 122 | -------------------------------------------------------------------------------- /SvImgeInfo/SvImgeInfo/en.lproj/SvImageInfoViewController_iPhone.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1536 5 | 12A269 6 | 2835 7 | 1187 8 | 624.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 1919 12 | 13 | 14 | IBProxyObject 15 | IBUIView 16 | 17 | 18 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 19 | 20 | 21 | PluginDependencyRecalculationVersion 22 | 23 | 24 | 25 | 26 | IBFilesOwner 27 | IBCocoaTouchFramework 28 | 29 | 30 | IBFirstResponder 31 | IBCocoaTouchFramework 32 | 33 | 34 | 35 | 274 36 | {{0, 20}, {320, 548}} 37 | 38 | 39 | 40 | 41 | 3 42 | MC43NQA 43 | 44 | 2 45 | 46 | 47 | NO 48 | 49 | 50 | IBUIScreenMetrics 51 | 52 | YES 53 | 54 | 55 | 56 | 57 | 58 | {320, 568} 59 | {568, 320} 60 | 61 | 62 | IBCocoaTouchFramework 63 | Retina 4 Full Screen 64 | 2 65 | 66 | IBCocoaTouchFramework 67 | 68 | 69 | 70 | 71 | 72 | 73 | view 74 | 75 | 76 | 77 | 7 78 | 79 | 80 | 81 | 82 | 83 | 0 84 | 85 | 86 | 87 | 88 | 89 | -1 90 | 91 | 92 | File's Owner 93 | 94 | 95 | -2 96 | 97 | 98 | 99 | 100 | 6 101 | 102 | 103 | 104 | 105 | 106 | 107 | SvImageInfoViewController 108 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 109 | UIResponder 110 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 111 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 112 | 113 | 114 | 115 | 116 | 117 | 7 118 | 119 | 120 | 121 | 122 | SvImageInfoViewController 123 | UIViewController 124 | 125 | IBProjectSource 126 | ./Classes/SvImageInfoViewController.h 127 | 128 | 129 | 130 | 131 | 0 132 | IBCocoaTouchFramework 133 | YES 134 | 3 135 | YES 136 | 1919 137 | 138 | 139 | -------------------------------------------------------------------------------- /SvImgeInfo/SvImgeInfo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | F53F0BB4176F655A00E8FBF3 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F53F0BB3176F655A00E8FBF3 /* UIKit.framework */; }; 11 | F53F0BB6176F655A00E8FBF3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F53F0BB5176F655A00E8FBF3 /* Foundation.framework */; }; 12 | F53F0BB8176F655A00E8FBF3 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F53F0BB7176F655A00E8FBF3 /* CoreGraphics.framework */; }; 13 | F53F0BBE176F655A00E8FBF3 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = F53F0BBC176F655A00E8FBF3 /* InfoPlist.strings */; }; 14 | F53F0BC0176F655A00E8FBF3 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F53F0BBF176F655A00E8FBF3 /* main.m */; }; 15 | F53F0BC4176F655A00E8FBF3 /* SvImageInfoAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F53F0BC3176F655A00E8FBF3 /* SvImageInfoAppDelegate.m */; }; 16 | F53F0BC6176F655A00E8FBF3 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = F53F0BC5176F655A00E8FBF3 /* Default.png */; }; 17 | F53F0BC8176F655A00E8FBF3 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F53F0BC7176F655A00E8FBF3 /* Default@2x.png */; }; 18 | F53F0BCA176F655A00E8FBF3 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F53F0BC9176F655A00E8FBF3 /* Default-568h@2x.png */; }; 19 | F53F0BCD176F655A00E8FBF3 /* SvImageInfoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F53F0BCC176F655A00E8FBF3 /* SvImageInfoViewController.m */; }; 20 | F53F0BD0176F655A00E8FBF3 /* SvImageInfoViewController_iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = F53F0BCE176F655A00E8FBF3 /* SvImageInfoViewController_iPhone.xib */; }; 21 | F53F0BD3176F655A00E8FBF3 /* SvImageInfoViewController_iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = F53F0BD1176F655A00E8FBF3 /* SvImageInfoViewController_iPad.xib */; }; 22 | F53F0BDA176F658500E8FBF3 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F53F0BD9176F658500E8FBF3 /* ImageIO.framework */; }; 23 | F53F0BDC1770AA2700E8FBF3 /* DSC02039.JPG in Resources */ = {isa = PBXBuildFile; fileRef = F53F0BDB1770AA2700E8FBF3 /* DSC02039.JPG */; }; 24 | F59D15B81771EC220061B84B /* SvImageInfoUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = F59D15B71771EC220061B84B /* SvImageInfoUtils.m */; }; 25 | F59D15BA1771F3460061B84B /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F59D15B91771F3460061B84B /* MobileCoreServices.framework */; }; 26 | F59D15BD1771FD250061B84B /* SvImageInfoEditUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = F59D15BC1771FD250061B84B /* SvImageInfoEditUtils.m */; }; 27 | /* End PBXBuildFile section */ 28 | 29 | /* Begin PBXFileReference section */ 30 | F53F0BB0176F655A00E8FBF3 /* SvImgeInfo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SvImgeInfo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 31 | F53F0BB3176F655A00E8FBF3 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 32 | F53F0BB5176F655A00E8FBF3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 33 | F53F0BB7176F655A00E8FBF3 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 34 | F53F0BBB176F655A00E8FBF3 /* SvImgeInfo-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "SvImgeInfo-Info.plist"; sourceTree = ""; }; 35 | F53F0BBD176F655A00E8FBF3 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 36 | F53F0BBF176F655A00E8FBF3 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 37 | F53F0BC1176F655A00E8FBF3 /* SvImgeInfo-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SvImgeInfo-Prefix.pch"; sourceTree = ""; }; 38 | F53F0BC2176F655A00E8FBF3 /* SvImageInfoAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SvImageInfoAppDelegate.h; sourceTree = ""; }; 39 | F53F0BC3176F655A00E8FBF3 /* SvImageInfoAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SvImageInfoAppDelegate.m; sourceTree = ""; }; 40 | F53F0BC5176F655A00E8FBF3 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; 41 | F53F0BC7176F655A00E8FBF3 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; 42 | F53F0BC9176F655A00E8FBF3 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; 43 | F53F0BCB176F655A00E8FBF3 /* SvImageInfoViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SvImageInfoViewController.h; sourceTree = ""; }; 44 | F53F0BCC176F655A00E8FBF3 /* SvImageInfoViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SvImageInfoViewController.m; sourceTree = ""; }; 45 | F53F0BCF176F655A00E8FBF3 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/SvImageInfoViewController_iPhone.xib; sourceTree = ""; }; 46 | F53F0BD2176F655A00E8FBF3 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/SvImageInfoViewController_iPad.xib; sourceTree = ""; }; 47 | F53F0BD9176F658500E8FBF3 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; }; 48 | F53F0BDB1770AA2700E8FBF3 /* DSC02039.JPG */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = DSC02039.JPG; sourceTree = ""; }; 49 | F59D15B61771EC220061B84B /* SvImageInfoUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SvImageInfoUtils.h; sourceTree = ""; }; 50 | F59D15B71771EC220061B84B /* SvImageInfoUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SvImageInfoUtils.m; sourceTree = ""; }; 51 | F59D15B91771F3460061B84B /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; 52 | F59D15BB1771FD250061B84B /* SvImageInfoEditUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SvImageInfoEditUtils.h; sourceTree = ""; }; 53 | F59D15BC1771FD250061B84B /* SvImageInfoEditUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SvImageInfoEditUtils.m; sourceTree = ""; }; 54 | /* End PBXFileReference section */ 55 | 56 | /* Begin PBXFrameworksBuildPhase section */ 57 | F53F0BAD176F655A00E8FBF3 /* Frameworks */ = { 58 | isa = PBXFrameworksBuildPhase; 59 | buildActionMask = 2147483647; 60 | files = ( 61 | F59D15BA1771F3460061B84B /* MobileCoreServices.framework in Frameworks */, 62 | F53F0BDA176F658500E8FBF3 /* ImageIO.framework in Frameworks */, 63 | F53F0BB4176F655A00E8FBF3 /* UIKit.framework in Frameworks */, 64 | F53F0BB6176F655A00E8FBF3 /* Foundation.framework in Frameworks */, 65 | F53F0BB8176F655A00E8FBF3 /* CoreGraphics.framework in Frameworks */, 66 | ); 67 | runOnlyForDeploymentPostprocessing = 0; 68 | }; 69 | /* End PBXFrameworksBuildPhase section */ 70 | 71 | /* Begin PBXGroup section */ 72 | F53F0BA7176F655A00E8FBF3 = { 73 | isa = PBXGroup; 74 | children = ( 75 | F53F0BB9176F655A00E8FBF3 /* SvImgeInfo */, 76 | F53F0BB2176F655A00E8FBF3 /* Frameworks */, 77 | F53F0BB1176F655A00E8FBF3 /* Products */, 78 | ); 79 | sourceTree = ""; 80 | }; 81 | F53F0BB1176F655A00E8FBF3 /* Products */ = { 82 | isa = PBXGroup; 83 | children = ( 84 | F53F0BB0176F655A00E8FBF3 /* SvImgeInfo.app */, 85 | ); 86 | name = Products; 87 | sourceTree = ""; 88 | }; 89 | F53F0BB2176F655A00E8FBF3 /* Frameworks */ = { 90 | isa = PBXGroup; 91 | children = ( 92 | F59D15B91771F3460061B84B /* MobileCoreServices.framework */, 93 | F53F0BD9176F658500E8FBF3 /* ImageIO.framework */, 94 | F53F0BB3176F655A00E8FBF3 /* UIKit.framework */, 95 | F53F0BB5176F655A00E8FBF3 /* Foundation.framework */, 96 | F53F0BB7176F655A00E8FBF3 /* CoreGraphics.framework */, 97 | ); 98 | name = Frameworks; 99 | sourceTree = ""; 100 | }; 101 | F53F0BB9176F655A00E8FBF3 /* SvImgeInfo */ = { 102 | isa = PBXGroup; 103 | children = ( 104 | F53F0BC2176F655A00E8FBF3 /* SvImageInfoAppDelegate.h */, 105 | F53F0BC3176F655A00E8FBF3 /* SvImageInfoAppDelegate.m */, 106 | F53F0BCB176F655A00E8FBF3 /* SvImageInfoViewController.h */, 107 | F53F0BCC176F655A00E8FBF3 /* SvImageInfoViewController.m */, 108 | F53F0BCE176F655A00E8FBF3 /* SvImageInfoViewController_iPhone.xib */, 109 | F53F0BD1176F655A00E8FBF3 /* SvImageInfoViewController_iPad.xib */, 110 | F59D15B51771EC030061B84B /* SvImageInfoUtil */, 111 | F53F0BBA176F655A00E8FBF3 /* Supporting Files */, 112 | ); 113 | path = SvImgeInfo; 114 | sourceTree = ""; 115 | }; 116 | F53F0BBA176F655A00E8FBF3 /* Supporting Files */ = { 117 | isa = PBXGroup; 118 | children = ( 119 | F53F0BDB1770AA2700E8FBF3 /* DSC02039.JPG */, 120 | F53F0BBB176F655A00E8FBF3 /* SvImgeInfo-Info.plist */, 121 | F53F0BBC176F655A00E8FBF3 /* InfoPlist.strings */, 122 | F53F0BBF176F655A00E8FBF3 /* main.m */, 123 | F53F0BC1176F655A00E8FBF3 /* SvImgeInfo-Prefix.pch */, 124 | F53F0BC5176F655A00E8FBF3 /* Default.png */, 125 | F53F0BC7176F655A00E8FBF3 /* Default@2x.png */, 126 | F53F0BC9176F655A00E8FBF3 /* Default-568h@2x.png */, 127 | ); 128 | name = "Supporting Files"; 129 | sourceTree = ""; 130 | }; 131 | F59D15B51771EC030061B84B /* SvImageInfoUtil */ = { 132 | isa = PBXGroup; 133 | children = ( 134 | F59D15B61771EC220061B84B /* SvImageInfoUtils.h */, 135 | F59D15B71771EC220061B84B /* SvImageInfoUtils.m */, 136 | F59D15BB1771FD250061B84B /* SvImageInfoEditUtils.h */, 137 | F59D15BC1771FD250061B84B /* SvImageInfoEditUtils.m */, 138 | ); 139 | path = SvImageInfoUtil; 140 | sourceTree = SOURCE_ROOT; 141 | }; 142 | /* End PBXGroup section */ 143 | 144 | /* Begin PBXNativeTarget section */ 145 | F53F0BAF176F655A00E8FBF3 /* SvImgeInfo */ = { 146 | isa = PBXNativeTarget; 147 | buildConfigurationList = F53F0BD6176F655A00E8FBF3 /* Build configuration list for PBXNativeTarget "SvImgeInfo" */; 148 | buildPhases = ( 149 | F53F0BAC176F655A00E8FBF3 /* Sources */, 150 | F53F0BAD176F655A00E8FBF3 /* Frameworks */, 151 | F53F0BAE176F655A00E8FBF3 /* Resources */, 152 | ); 153 | buildRules = ( 154 | ); 155 | dependencies = ( 156 | ); 157 | name = SvImgeInfo; 158 | productName = SvImgeInfo; 159 | productReference = F53F0BB0176F655A00E8FBF3 /* SvImgeInfo.app */; 160 | productType = "com.apple.product-type.application"; 161 | }; 162 | /* End PBXNativeTarget section */ 163 | 164 | /* Begin PBXProject section */ 165 | F53F0BA8176F655A00E8FBF3 /* Project object */ = { 166 | isa = PBXProject; 167 | attributes = { 168 | CLASSPREFIX = SvImageInfo; 169 | LastUpgradeCheck = 0460; 170 | ORGANIZATIONNAME = maple; 171 | }; 172 | buildConfigurationList = F53F0BAB176F655A00E8FBF3 /* Build configuration list for PBXProject "SvImgeInfo" */; 173 | compatibilityVersion = "Xcode 3.2"; 174 | developmentRegion = English; 175 | hasScannedForEncodings = 0; 176 | knownRegions = ( 177 | en, 178 | ); 179 | mainGroup = F53F0BA7176F655A00E8FBF3; 180 | productRefGroup = F53F0BB1176F655A00E8FBF3 /* Products */; 181 | projectDirPath = ""; 182 | projectRoot = ""; 183 | targets = ( 184 | F53F0BAF176F655A00E8FBF3 /* SvImgeInfo */, 185 | ); 186 | }; 187 | /* End PBXProject section */ 188 | 189 | /* Begin PBXResourcesBuildPhase section */ 190 | F53F0BAE176F655A00E8FBF3 /* Resources */ = { 191 | isa = PBXResourcesBuildPhase; 192 | buildActionMask = 2147483647; 193 | files = ( 194 | F53F0BBE176F655A00E8FBF3 /* InfoPlist.strings in Resources */, 195 | F53F0BC6176F655A00E8FBF3 /* Default.png in Resources */, 196 | F53F0BC8176F655A00E8FBF3 /* Default@2x.png in Resources */, 197 | F53F0BCA176F655A00E8FBF3 /* Default-568h@2x.png in Resources */, 198 | F53F0BD0176F655A00E8FBF3 /* SvImageInfoViewController_iPhone.xib in Resources */, 199 | F53F0BD3176F655A00E8FBF3 /* SvImageInfoViewController_iPad.xib in Resources */, 200 | F53F0BDC1770AA2700E8FBF3 /* DSC02039.JPG in Resources */, 201 | ); 202 | runOnlyForDeploymentPostprocessing = 0; 203 | }; 204 | /* End PBXResourcesBuildPhase section */ 205 | 206 | /* Begin PBXSourcesBuildPhase section */ 207 | F53F0BAC176F655A00E8FBF3 /* Sources */ = { 208 | isa = PBXSourcesBuildPhase; 209 | buildActionMask = 2147483647; 210 | files = ( 211 | F53F0BC0176F655A00E8FBF3 /* main.m in Sources */, 212 | F53F0BC4176F655A00E8FBF3 /* SvImageInfoAppDelegate.m in Sources */, 213 | F53F0BCD176F655A00E8FBF3 /* SvImageInfoViewController.m in Sources */, 214 | F59D15B81771EC220061B84B /* SvImageInfoUtils.m in Sources */, 215 | F59D15BD1771FD250061B84B /* SvImageInfoEditUtils.m in Sources */, 216 | ); 217 | runOnlyForDeploymentPostprocessing = 0; 218 | }; 219 | /* End PBXSourcesBuildPhase section */ 220 | 221 | /* Begin PBXVariantGroup section */ 222 | F53F0BBC176F655A00E8FBF3 /* InfoPlist.strings */ = { 223 | isa = PBXVariantGroup; 224 | children = ( 225 | F53F0BBD176F655A00E8FBF3 /* en */, 226 | ); 227 | name = InfoPlist.strings; 228 | sourceTree = ""; 229 | }; 230 | F53F0BCE176F655A00E8FBF3 /* SvImageInfoViewController_iPhone.xib */ = { 231 | isa = PBXVariantGroup; 232 | children = ( 233 | F53F0BCF176F655A00E8FBF3 /* en */, 234 | ); 235 | name = SvImageInfoViewController_iPhone.xib; 236 | sourceTree = ""; 237 | }; 238 | F53F0BD1176F655A00E8FBF3 /* SvImageInfoViewController_iPad.xib */ = { 239 | isa = PBXVariantGroup; 240 | children = ( 241 | F53F0BD2176F655A00E8FBF3 /* en */, 242 | ); 243 | name = SvImageInfoViewController_iPad.xib; 244 | sourceTree = ""; 245 | }; 246 | /* End PBXVariantGroup section */ 247 | 248 | /* Begin XCBuildConfiguration section */ 249 | F53F0BD4176F655A00E8FBF3 /* Debug */ = { 250 | isa = XCBuildConfiguration; 251 | buildSettings = { 252 | ALWAYS_SEARCH_USER_PATHS = NO; 253 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 254 | CLANG_CXX_LIBRARY = "libc++"; 255 | CLANG_WARN_CONSTANT_CONVERSION = YES; 256 | CLANG_WARN_EMPTY_BODY = YES; 257 | CLANG_WARN_ENUM_CONVERSION = YES; 258 | CLANG_WARN_INT_CONVERSION = YES; 259 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 260 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 261 | COPY_PHASE_STRIP = NO; 262 | GCC_C_LANGUAGE_STANDARD = gnu99; 263 | GCC_DYNAMIC_NO_PIC = NO; 264 | GCC_OPTIMIZATION_LEVEL = 0; 265 | GCC_PREPROCESSOR_DEFINITIONS = ( 266 | "DEBUG=1", 267 | "$(inherited)", 268 | ); 269 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 270 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 271 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 272 | GCC_WARN_UNUSED_VARIABLE = YES; 273 | IPHONEOS_DEPLOYMENT_TARGET = 6.1; 274 | ONLY_ACTIVE_ARCH = YES; 275 | SDKROOT = iphoneos; 276 | TARGETED_DEVICE_FAMILY = "1,2"; 277 | }; 278 | name = Debug; 279 | }; 280 | F53F0BD5176F655A00E8FBF3 /* Release */ = { 281 | isa = XCBuildConfiguration; 282 | buildSettings = { 283 | ALWAYS_SEARCH_USER_PATHS = NO; 284 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 285 | CLANG_CXX_LIBRARY = "libc++"; 286 | CLANG_WARN_CONSTANT_CONVERSION = YES; 287 | CLANG_WARN_EMPTY_BODY = YES; 288 | CLANG_WARN_ENUM_CONVERSION = YES; 289 | CLANG_WARN_INT_CONVERSION = YES; 290 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 291 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 292 | COPY_PHASE_STRIP = YES; 293 | GCC_C_LANGUAGE_STANDARD = gnu99; 294 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 295 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 296 | GCC_WARN_UNUSED_VARIABLE = YES; 297 | IPHONEOS_DEPLOYMENT_TARGET = 6.1; 298 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; 299 | SDKROOT = iphoneos; 300 | TARGETED_DEVICE_FAMILY = "1,2"; 301 | VALIDATE_PRODUCT = YES; 302 | }; 303 | name = Release; 304 | }; 305 | F53F0BD7176F655A00E8FBF3 /* Debug */ = { 306 | isa = XCBuildConfiguration; 307 | buildSettings = { 308 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 309 | GCC_PREFIX_HEADER = "SvImgeInfo/SvImgeInfo-Prefix.pch"; 310 | INFOPLIST_FILE = "SvImgeInfo/SvImgeInfo-Info.plist"; 311 | IPHONEOS_DEPLOYMENT_TARGET = 4.3; 312 | PRODUCT_NAME = "$(TARGET_NAME)"; 313 | WRAPPER_EXTENSION = app; 314 | }; 315 | name = Debug; 316 | }; 317 | F53F0BD8176F655A00E8FBF3 /* Release */ = { 318 | isa = XCBuildConfiguration; 319 | buildSettings = { 320 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 321 | GCC_PREFIX_HEADER = "SvImgeInfo/SvImgeInfo-Prefix.pch"; 322 | INFOPLIST_FILE = "SvImgeInfo/SvImgeInfo-Info.plist"; 323 | IPHONEOS_DEPLOYMENT_TARGET = 4.3; 324 | PRODUCT_NAME = "$(TARGET_NAME)"; 325 | WRAPPER_EXTENSION = app; 326 | }; 327 | name = Release; 328 | }; 329 | /* End XCBuildConfiguration section */ 330 | 331 | /* Begin XCConfigurationList section */ 332 | F53F0BAB176F655A00E8FBF3 /* Build configuration list for PBXProject "SvImgeInfo" */ = { 333 | isa = XCConfigurationList; 334 | buildConfigurations = ( 335 | F53F0BD4176F655A00E8FBF3 /* Debug */, 336 | F53F0BD5176F655A00E8FBF3 /* Release */, 337 | ); 338 | defaultConfigurationIsVisible = 0; 339 | defaultConfigurationName = Release; 340 | }; 341 | F53F0BD6176F655A00E8FBF3 /* Build configuration list for PBXNativeTarget "SvImgeInfo" */ = { 342 | isa = XCConfigurationList; 343 | buildConfigurations = ( 344 | F53F0BD7176F655A00E8FBF3 /* Debug */, 345 | F53F0BD8176F655A00E8FBF3 /* Release */, 346 | ); 347 | defaultConfigurationIsVisible = 0; 348 | defaultConfigurationName = Release; 349 | }; 350 | /* End XCConfigurationList section */ 351 | }; 352 | rootObject = F53F0BA8176F655A00E8FBF3 /* Project object */; 353 | } 354 | --------------------------------------------------------------------------------