14 Commits
Author SHA1 Message Date
giuseppenuc e2055059a2 no message 2016-04-05 15:41:49 +02:00
Giuseppe Nucifora 6245b8be13 Merge branch 'master' into 'develop'
Merge branch 'develop' into 'master'

Develop



See merge request !2

See merge request !3
2016-04-05 15:26:18 +02:00
Giuseppe Nucifora 50d92f3c3b Merge branch 'develop' into 'master'
Develop



See merge request !2
2016-04-05 15:24:24 +02:00
giuseppenuc afddd1e959 - Fix dealloc crash 2016-04-05 15:23:13 +02:00
giuseppenuc 52ac833f7c - Fix dealloc crash 2016-04-05 11:19:35 +02:00
Giuseppe Nucifora 49e429c393 Merge branch 'develop' into 'master'
- Fix



See merge request !1
2016-04-04 19:32:11 +02:00
giuseppenuc 0c0c28a31d - Fix 2016-04-04 19:30:43 +02:00
giuseppenuc 143d532745 Merge branch 'new_develop' into develop 2016-04-04 17:39:12 +02:00
giuseppenuc ea070d9ac8 - upgrade 2016-04-04 17:38:04 +02:00
giuseppenuc a736234662 - fix 2016-01-16 13:39:29 +01:00
giuseppenuc 49a120f8c3 Merge pull request #2 from giuseppenucifora/master
Release 0.1.1
2016-01-11 20:06:46 +01:00
giuseppenuc c496a4bd7f no message 2016-01-11 20:01:52 +01:00
giuseppenuc 1b897623b2 Merge pull request #1 from giuseppenucifora/develop
Release 0.1.0
2016-01-11 19:57:13 +01:00
giuseppenuc 11900f880b Release 0.1.0 2016-01-11 19:48:41 +01:00
115 changed files with 8091 additions and 2515 deletions

No files matched your search

@@ -10,11 +10,14 @@
#import "GradientButton.h" #import "GradientButton.h"
#import "PureLayout/PureLayout.h" #import "PureLayout/PureLayout.h"
@interface gradiendButtonViewController () { @interface gradiendButtonViewController () {
GradientButton *button; GradientButton *button;
GradientButton *autoLayoutButton;
BOOL didUpdateConstraints; BOOL didUpdateConstraints;
UIButton *presentControllerButton;
} }
@end @end
@@ -25,14 +28,29 @@
{ {
[super viewDidLoad]; [super viewDidLoad];
//button = [[GradientButton alloc] initWithFrame:CGRectMake(0, 0, 200, 50)]; button = [[GradientButton alloc] initWithFrame:CGRectMake(0, 0, 200, 50)];
button = [GradientButton newAutoLayoutView]; [button setCenter:self.view.center];
//[button setCenter:self.view.center]; [button setTitle:@"Normal Button" forState:UIControlStateNormal];
[button setTitle:@"Prove" forState:UIControlStateNormal];
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[button setbackgroundLayerWithColors:@[[UIColor redColor],[UIColor blueColor]] startPoint:CGPointMake(0, 0)]; [button setbackgroundLayerWithColors:@[[UIColor greenColor],[UIColor whiteColor],[UIColor redColor]] startPoint:CGPointMake(0, 0)];
[self.view addSubview:button]; [self.view addSubview:button];
autoLayoutButton = [GradientButton newAutoLayoutView];
[autoLayoutButton setTitle:@"Autolayout Button" forState:UIControlStateNormal];
[autoLayoutButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[autoLayoutButton setbackgroundLayerWithColors:@[[UIColor greenColor],[UIColor whiteColor],[UIColor redColor]] startPoint:CGPointMake(0, 1)];
[self.view addSubview:autoLayoutButton];
presentControllerButton = [UIButton newAutoLayoutView];
[presentControllerButton setTitle:@"Presenta Conttoller" forState:UIControlStateNormal];
[presentControllerButton addTarget:self action:@selector(presentAction:) forControlEvents:UIControlEventTouchUpInside];
[presentControllerButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[self.view addSubview:presentControllerButton];
// Do any additional setup after loading the view, typically from a nib. // Do any additional setup after loading the view, typically from a nib.
} }
@@ -40,62 +58,75 @@
- (void) viewDidAppear:(BOOL)animated { - (void) viewDidAppear:(BOOL)animated {
NSLog(@"viewdidappear : %f %f %f %f",button.bounds.origin.x,button.bounds.origin.y,button.bounds.size.width,button.bounds.size.height); dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
/*dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [button setbackgroundLayerWithColors:@[[UIColor redColor],[UIColor blueColor], [UIColor redColor], [UIColor greenColor]] startPoint:CGPointMake(0, 1)];
[button setbackgroundLayerWithColors:@[[UIColor redColor],[UIColor blueColor], [UIColor redColor], [UIColor greenColor]] startPoint:CGPointMake(0, 1)]; });
});
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ CGRect rect = button.frame;
CGRect rect = button.frame;
rect.size.height = 70;
rect.size.height = 70; rect.size.width = 240;
rect.size.width = 240;
[button setFrame:rect];
[button setFrame:rect];
});
});
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [button.layer setCornerRadius:4];
[button.layer setCornerRadius:4]; [button.layer setMasksToBounds:YES];
[button.layer setMasksToBounds:YES]; });
});
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(8 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(8 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [button setbackgroundLayerWithColors:@[[UIColor whiteColor],[UIColor blueColor], [UIColor blackColor], [UIColor greenColor]] startPoint:CGPointMake(1, 0)];
[button setbackgroundLayerWithColors:@[[UIColor whiteColor],[UIColor blueColor], [UIColor blackColor], [UIColor greenColor]] startPoint:CGPointMake(1, 0)]; });
});
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(9 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(9 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ CGRect rect = button.bounds;
CGRect rect = button.bounds;
rect.size.height = 50;
rect.size.height = 50; rect.size.width = 120;
rect.size.width = 120;
[button setBounds:rect];
[button setBounds:rect];
});
});
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(12 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(12 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [button.layer setCornerRadius:25];
[button.layer setCornerRadius:25]; [button.layer setMasksToBounds:YES];
[button.layer setMasksToBounds:YES]; });
});*/
} }
- (void) updateViewConstraints { - (void) updateViewConstraints {
if(!didUpdateConstraints) { if(!didUpdateConstraints) {
[button autoAlignAxisToSuperviewAxis:ALAxisHorizontal]; [autoLayoutButton autoPinEdgeToSuperviewEdge:ALEdgeTop withInset:50];
[button autoAlignAxisToSuperviewAxis:ALAxisVertical]; [autoLayoutButton autoPinEdgeToSuperviewEdge:ALEdgeLeading withInset:40];
[button autoPinEdgeToSuperviewEdge:ALEdgeLeading withInset:40]; [autoLayoutButton autoPinEdgeToSuperviewEdge:ALEdgeTrailing withInset:40];
[button autoPinEdgeToSuperviewEdge:ALEdgeTrailing withInset:40]; [autoLayoutButton autoSetDimension:ALDimensionHeight toSize:50];
[button autoSetDimension:ALDimensionHeight toSize:50];
[presentControllerButton autoMatchDimension:ALDimensionHeight toDimension:ALDimensionHeight ofView:autoLayoutButton];
[presentControllerButton autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:autoLayoutButton];
[presentControllerButton autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:autoLayoutButton];
[presentControllerButton autoAlignAxisToSuperviewAxis:ALAxisVertical];
didUpdateConstraints = YES; didUpdateConstraints = YES;
} }
[super updateViewConstraints]; [super updateViewConstraints];
} }
- (void) presentAction:(UIButton *) sender {
gradiendButtonViewController *viewController = [[gradiendButtonViewController alloc] init];
[self presentViewController:viewController animated:YES completion:nil];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[viewController dismissViewControllerAnimated:YES completion:nil];
});
}
- (void)didReceiveMemoryWarning - (void)didReceiveMemoryWarning
{ {
+14 -14
View File
@@ -1,14 +1,16 @@
PODS: PODS:
- Expecta (1.0.5) - Expecta (1.0.5)
- Expecta+Snapshots (2.0.0): - Expecta+Snapshots (3.0.0):
- Expecta (~> 1.0) - Expecta (~> 1.0)
- FBSnapshotTestCase/Core (~> 2.0.3) - FBSnapshotTestCase/Core (~> 2.0)
- FBSnapshotTestCase (2.0.7): - Specta (~> 1.0)
- FBSnapshotTestCase/SwiftSupport (= 2.0.7) - FBSnapshotTestCase (2.1.0):
- FBSnapshotTestCase/Core (2.0.7) - FBSnapshotTestCase/SwiftSupport (= 2.1.0)
- FBSnapshotTestCase/SwiftSupport (2.0.7): - FBSnapshotTestCase/Core (2.1.0)
- FBSnapshotTestCase/SwiftSupport (2.1.0):
- FBSnapshotTestCase/Core - FBSnapshotTestCase/Core
- GradientButton (0.1.0) - GradientButton (0.2.0):
- PureLayout
- PureLayout (3.0.1) - PureLayout (3.0.1)
- Specta (1.0.5) - Specta (1.0.5)
@@ -22,16 +24,14 @@ DEPENDENCIES:
EXTERNAL SOURCES: EXTERNAL SOURCES:
GradientButton: GradientButton:
:path: "../" :path: ../
SPEC CHECKSUMS: SPEC CHECKSUMS:
Expecta: e1c022fcd33910b6be89c291d2775b3fe27a89fe Expecta: e1c022fcd33910b6be89c291d2775b3fe27a89fe
Expecta+Snapshots: 29b38dd695bc72a0ed2bea833937d78df41943ba Expecta+Snapshots: c343f410c7a6392f3e22e78f94c44b6c0749a516
FBSnapshotTestCase: 7e85180d0d141a0cf472352edda7e80d7eaeb547 FBSnapshotTestCase: 366ecd378511d7716c79991cd8067d1eed23578d
GradientButton: a7372818b72063640a0b834938032cf3df2cea47 GradientButton: 7be2c4bc564d0cfe7c3043a4410723d95050cc0d
PureLayout: f35f5384c9c4e4479df041dbe33ad7577b71ddfb PureLayout: f35f5384c9c4e4479df041dbe33ad7577b71ddfb
Specta: ac94d110b865115fe60ff2c6d7281053c6f8e8a2 Specta: ac94d110b865115fe60ff2c6d7281053c6f8e8a2
PODFILE CHECKSUM: 630dfff3704fb33c3f204e868047b8f07051d5ba COCOAPODS: 0.39.0
COCOAPODS: 1.0.0.beta.2
@@ -1,11 +1,3 @@
//
// EXPMatchers+FBSnapshotTest.h
// Artsy
//
// Created by Daniel Doubrovkine on 1/14/14.
// Copyright (c) 2014 Artsy Inc. All rights reserved.
//
#import <Expecta/Expecta.h> #import <Expecta/Expecta.h>
#import "ExpectaObject+FBSnapshotTest.h" #import "ExpectaObject+FBSnapshotTest.h"
+22 -57
View File
@@ -1,11 +1,3 @@
//
// EXPMatchers+FBSnapshotTest.h
// Artsy
//
// Created by Daniel Doubrovkine on 1/14/14.
// Copyright (c) 2014 Artsy Inc. All rights reserved.
//
#import "EXPMatchers+FBSnapshotTest.h" #import "EXPMatchers+FBSnapshotTest.h"
#import <Expecta/EXPMatcherHelpers.h> #import <Expecta/EXPMatcherHelpers.h>
#import <FBSnapshotTestCase/FBSnapshotTestController.h> #import <FBSnapshotTestCase/FBSnapshotTestController.h>
@@ -102,11 +94,6 @@ void setGlobalReferenceImageDir(char *reference) {
@end @end
// If you're bringing in Speca via CocoaPods
// use the test path to get the test's image file URL
#if __has_include(<Specta/Specta.h>)
#import <Specta/Specta.h> #import <Specta/Specta.h>
#import <Specta/SpectaUtility.h> #import <Specta/SpectaUtility.h>
#import <Specta/SPTExample.h> #import <Specta/SPTExample.h>
@@ -130,6 +117,11 @@ NSString *sanitizedTestPath(){
EXPMatcherImplementationBegin(haveValidSnapshot, (void)){ EXPMatcherImplementationBegin(haveValidSnapshot, (void)){
__block NSError *error = nil; __block NSError *error = nil;
prerequisite(^BOOL{
return actual;
});
match(^BOOL{ match(^BOOL{
NSString *referenceImageDir = [self _getDefaultReferenceDirectory]; NSString *referenceImageDir = [self _getDefaultReferenceDirectory];
NSString *name = sanitizedTestPath(); NSString *name = sanitizedTestPath();
@@ -144,6 +136,10 @@ EXPMatcherImplementationBegin(haveValidSnapshot, (void)){
}); });
failureMessageForTo(^NSString *{ failureMessageForTo(^NSString *{
if (!actual) {
return [EXPExpectFBSnapshotTest combinedError:@"Nil was passed into haveValidSnapshot." test:sanitizedTestPath() error:nil];
}
return [EXPExpectFBSnapshotTest combinedError:@"expected a matching snapshot in" test:sanitizedTestPath() error:error]; return [EXPExpectFBSnapshotTest combinedError:@"expected a matching snapshot in" test:sanitizedTestPath() error:error];
}); });
@@ -159,7 +155,7 @@ EXPMatcherImplementationBegin(recordSnapshot, (void)) {
BOOL actualIsViewLayerOrViewController = ([actual isKindOfClass:UIView.class] || [actual isKindOfClass:CALayer.class] || [actual isKindOfClass:UIViewController.class]); BOOL actualIsViewLayerOrViewController = ([actual isKindOfClass:UIView.class] || [actual isKindOfClass:CALayer.class] || [actual isKindOfClass:UIViewController.class]);
prerequisite(^BOOL{ prerequisite(^BOOL{
return actualIsViewLayerOrViewController; return actual && actualIsViewLayerOrViewController;
}); });
match(^BOOL{ match(^BOOL{
@@ -178,6 +174,10 @@ EXPMatcherImplementationBegin(recordSnapshot, (void)) {
}); });
failureMessageForTo(^NSString *{ failureMessageForTo(^NSString *{
if (!actual) {
return [EXPExpectFBSnapshotTest combinedError:@"Nil was passed into recordSnapshot." test:sanitizedTestPath() error:nil];
}
if (!actualIsViewLayerOrViewController) { if (!actualIsViewLayerOrViewController) {
return [EXPExpectFBSnapshotTest combinedError:@"Expected a View, Layer or View Controller." test:sanitizedTestPath() error:nil]; return [EXPExpectFBSnapshotTest combinedError:@"Expected a View, Layer or View Controller." test:sanitizedTestPath() error:nil];
} }
@@ -198,54 +198,12 @@ EXPMatcherImplementationBegin(recordSnapshot, (void)) {
} }
EXPMatcherImplementationEnd EXPMatcherImplementationEnd
#else
// If you don't have Speca stub the functions
EXPMatcherImplementationBegin(haveValidSnapshot, (void)){
prerequisite(^BOOL{
return NO;
});
failureMessageForTo(^NSString *{
return @"you need Specta installed via CocoaPods to use haveValidSnapshot, use haveValidSnapshotNamed instead";
});
failureMessageForNotTo(^NSString *{
return @"you need Specta installed via CocoaPods to use haveValidSnapshot, use haveValidSnapshotNamed instead";
});
}
EXPMatcherImplementationEnd
EXPMatcherImplementationBegin(recordSnapshot, (void)) {
prerequisite(^BOOL{
return NO;
});
failureMessageForTo(^NSString *{
return @"you need Specta installed via CocoaPods to use recordSnapshot, use recordSnapshotNamed instead";
});
failureMessageForNotTo(^NSString *{
return @"you need Specta installed via CocoaPods to use recordSnapshot, use recordSnapshotNamed instead";
});
}
EXPMatcherImplementationEnd
#endif
EXPMatcherImplementationBegin(haveValidSnapshotNamed, (NSString *snapshot)){ EXPMatcherImplementationBegin(haveValidSnapshotNamed, (NSString *snapshot)){
BOOL snapshotIsNil = (snapshot == nil); BOOL snapshotIsNil = (snapshot == nil);
__block NSError *error = nil; __block NSError *error = nil;
prerequisite(^BOOL{ prerequisite(^BOOL{
return !(snapshotIsNil); return actual && !(snapshotIsNil);
}); });
match(^BOOL{ match(^BOOL{
@@ -260,6 +218,10 @@ EXPMatcherImplementationBegin(haveValidSnapshotNamed, (NSString *snapshot)){
}); });
failureMessageForTo(^NSString *{ failureMessageForTo(^NSString *{
if (!actual) {
return [EXPExpectFBSnapshotTest combinedError:@"Nil was passed into haveValidSnapshotNamed." test:sanitizedTestPath() error:nil];
}
return [EXPExpectFBSnapshotTest combinedError:@"expected a matching snapshot named" test:snapshot error:error]; return [EXPExpectFBSnapshotTest combinedError:@"expected a matching snapshot named" test:snapshot error:error];
}); });
@@ -295,6 +257,9 @@ EXPMatcherImplementationBegin(recordSnapshotNamed, (NSString *snapshot)) {
}); });
failureMessageForTo(^NSString *{ failureMessageForTo(^NSString *{
if (!actual) {
return [EXPExpectFBSnapshotTest combinedError:@"Nil was passed into recordSnapshotNamed." test:sanitizedTestPath() error:nil];
}
if (!actualIsViewLayerOrViewController) { if (!actualIsViewLayerOrViewController) {
return [EXPExpectFBSnapshotTest combinedError:@"Expected a View, Layer or View Controller." test:snapshot error:nil]; return [EXPExpectFBSnapshotTest combinedError:@"Expected a View, Layer or View Controller." test:snapshot error:nil];
} }
@@ -0,0 +1,20 @@
/*
* Copyright (c) 2015, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
*/
#import <UIKit/UIKit.h>
@interface UIApplication (StrictKeyWindow)
/**
@return The receiver's @c keyWindow. Raises an assertion if @c nil.
*/
- (UIWindow *)fb_strictKeyWindow;
@end
@@ -0,0 +1,27 @@
/*
* Copyright (c) 2015, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
*/
#import <FBSnapshotTestCase/UIApplication+StrictKeyWindow.h>
@implementation UIApplication (StrictKeyWindow)
- (UIWindow *)fb_strictKeyWindow
{
UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
if (!keyWindow) {
[NSException raise:@"FBSnapshotTestCaseNilKeyWindowException"
format:@"Snapshot tests must be hosted by an application with a key window. Please ensure your test"
" host sets up a key window at launch (either via storyboards or programmatically) and doesn't"
" do anything to remove it while snapshot tests are running."];
}
return keyWindow;
}
@end
@@ -9,6 +9,7 @@
*/ */
#import <FBSnapshotTestCase/UIImage+Snapshot.h> #import <FBSnapshotTestCase/UIImage+Snapshot.h>
#import <FBSnapshotTestCase/UIApplication+StrictKeyWindow.h>
@implementation UIImage (Snapshot) @implementation UIImage (Snapshot)
@@ -41,21 +42,31 @@
{ {
CGRect bounds = view.bounds; CGRect bounds = view.bounds;
NSAssert1(CGRectGetWidth(bounds), @"Zero width for view %@", view); NSAssert1(CGRectGetWidth(bounds), @"Zero width for view %@", view);
NSAssert1(CGRectGetHeight(bounds), @"Zero height for view %@", view); NSAssert1(CGRectGetHeight(bounds), @"Zero height for view %@", view);
UIWindow *window = view.window; // If the input view is already a UIWindow, then just use that. Otherwise wrap in a window.
if (window == nil) { UIWindow *window = [view isKindOfClass:[UIWindow class]] ? (UIWindow *)view : view.window;
window = [[UIWindow alloc] initWithFrame:bounds]; BOOL removeFromSuperview = NO;
[window addSubview:view]; if (!window) {
[window makeKeyAndVisible]; window = [[UIApplication sharedApplication] fb_strictKeyWindow];
} }
if (!view.window && view != window) {
[window addSubview:view];
removeFromSuperview = YES;
}
UIGraphicsBeginImageContextWithOptions(bounds.size, NO, 0); UIGraphicsBeginImageContextWithOptions(bounds.size, NO, 0);
[view layoutIfNeeded]; [view layoutIfNeeded];
[view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES]; [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
UIImage *snapshot = UIGraphicsGetImageFromCurrentImageContext(); UIImage *snapshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext(); UIGraphicsEndImageContext();
if (removeFromSuperview) {
[view removeFromSuperview];
}
return snapshot; return snapshot;
} }
@@ -9,6 +9,7 @@
*/ */
#import <FBSnapshotTestCase/FBSnapshotTestCasePlatform.h> #import <FBSnapshotTestCase/FBSnapshotTestCasePlatform.h>
#import <FBSnapshotTestCase/FBSnapshotTestController.h>
#import <QuartzCore/QuartzCore.h> #import <QuartzCore/QuartzCore.h>
@@ -48,7 +49,7 @@
/** /**
Similar to our much-loved XCTAssert() macros. Use this to perform your test. No need to write an explanation, though. Similar to our much-loved XCTAssert() macros. Use this to perform your test. No need to write an explanation, though.
@param layer The layer to snapshot @param layer The layer to snapshot
@param identifier An optional identifier, used is there are multiple snapshot tests in a given -test method. @param identifier An optional identifier, used if there are multiple snapshot tests in a given -test method.
@param suffixes An NSOrderedSet of strings for the different suffixes @param suffixes An NSOrderedSet of strings for the different suffixes
@param tolerance The percentage of pixels that can differ and still count as an 'identical' layer @param tolerance The percentage of pixels that can differ and still count as an 'identical' layer
*/ */
@@ -9,6 +9,7 @@
*/ */
#import <FBSnapshotTestCase/FBSnapshotTestCasePlatform.h> #import <FBSnapshotTestCase/FBSnapshotTestCasePlatform.h>
#import <FBSnapshotTestCase/UIApplication+StrictKeyWindow.h>
#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>
BOOL FBSnapshotTestCaseIs64Bit(void) BOOL FBSnapshotTestCaseIs64Bit(void)
@@ -34,7 +35,8 @@ NSOrderedSet *FBSnapshotTestCaseDefaultSuffixes(void)
NSString *FBDeviceAgnosticNormalizedFileName(NSString *fileName) NSString *FBDeviceAgnosticNormalizedFileName(NSString *fileName)
{ {
UIDevice *device = [UIDevice currentDevice]; UIDevice *device = [UIDevice currentDevice];
CGSize screenSize = [[UIApplication sharedApplication] keyWindow].bounds.size; UIWindow *keyWindow = [[UIApplication sharedApplication] fb_strictKeyWindow];
CGSize screenSize = keyWindow.bounds.size;
NSString *os = device.systemVersion; NSString *os = device.systemVersion;
fileName = [NSString stringWithFormat:@"%@_%@%@_%.0fx%.0f", fileName, device.model, os, screenSize.width, screenSize.height]; fileName = [NSString stringWithFormat:@"%@_%@%@_%.0fx%.0f", fileName, device.model, os, screenSize.width, screenSize.height];
@@ -28,6 +28,21 @@ extern NSString *const FBSnapshotTestControllerErrorDomain;
*/ */
extern NSString *const FBReferenceImageFilePathKey; extern NSString *const FBReferenceImageFilePathKey;
/**
Errors returned by the methods of FBSnapshotTestController sometimes contain this key in the `userInfo` dictionary.
*/
extern NSString *const FBReferenceImageKey;
/**
Errors returned by the methods of FBSnapshotTestController sometimes contain this key in the `userInfo` dictionary.
*/
extern NSString *const FBCapturedImageKey;
/**
Errors returned by the methods of FBSnapshotTestController sometimes contain this key in the `userInfo` dictionary.
*/
extern NSString *const FBDiffedImageKey;
/** /**
Provides the heavy-lifting for FBSnapshotTestCase. It loads and saves images, along with performing the actual pixel- Provides the heavy-lifting for FBSnapshotTestCase. It loads and saves images, along with performing the actual pixel-
by-pixel comparison of images. by-pixel comparison of images.
@@ -18,6 +18,9 @@
NSString *const FBSnapshotTestControllerErrorDomain = @"FBSnapshotTestControllerErrorDomain"; NSString *const FBSnapshotTestControllerErrorDomain = @"FBSnapshotTestControllerErrorDomain";
NSString *const FBReferenceImageFilePathKey = @"FBReferenceImageFilePathKey"; NSString *const FBReferenceImageFilePathKey = @"FBReferenceImageFilePathKey";
NSString *const FBReferenceImageKey = @"FBReferenceImageKey";
NSString *const FBCapturedImageKey = @"FBCapturedImageKey";
NSString *const FBDiffedImageKey = @"FBDiffedImageKey";
typedef NS_ENUM(NSUInteger, FBTestSnapshotFileNameType) { typedef NS_ENUM(NSUInteger, FBTestSnapshotFileNameType) {
FBTestSnapshotFileNameTypeReference, FBTestSnapshotFileNameTypeReference,
@@ -126,25 +129,25 @@ typedef NS_ENUM(NSUInteger, FBTestSnapshotFileNameType) {
tolerance:(CGFloat)tolerance tolerance:(CGFloat)tolerance
error:(NSError **)errorPtr error:(NSError **)errorPtr
{ {
if (CGSizeEqualToSize(referenceImage.size, image.size)) { BOOL sameImageDimensions = CGSizeEqualToSize(referenceImage.size, image.size);
BOOL imagesEqual = [referenceImage fb_compareWithImage:image tolerance:tolerance]; if (sameImageDimensions && [referenceImage fb_compareWithImage:image tolerance:tolerance]) {
if (NULL != errorPtr) { return YES;
*errorPtr = [NSError errorWithDomain:FBSnapshotTestControllerErrorDomain
code:FBSnapshotTestControllerErrorCodeImagesDifferent
userInfo:@{
NSLocalizedDescriptionKey: @"Images different",
}];
}
return imagesEqual;
} }
if (NULL != errorPtr) { if (NULL != errorPtr) {
NSString *errorDescription = sameImageDimensions ? @"Images different" : @"Images different sizes";
NSString *errorReason = sameImageDimensions ? [NSString stringWithFormat:@"image pixels differed by more than %.2f%% from the reference image", tolerance * 100]
: [NSString stringWithFormat:@"referenceImage:%@, image:%@", NSStringFromCGSize(referenceImage.size), NSStringFromCGSize(image.size)];
FBSnapshotTestControllerErrorCode errorCode = sameImageDimensions ? FBSnapshotTestControllerErrorCodeImagesDifferent : FBSnapshotTestControllerErrorCodeImagesDifferentSizes;
*errorPtr = [NSError errorWithDomain:FBSnapshotTestControllerErrorDomain *errorPtr = [NSError errorWithDomain:FBSnapshotTestControllerErrorDomain
code:FBSnapshotTestControllerErrorCodeImagesDifferentSizes code:errorCode
userInfo:@{ userInfo:@{
NSLocalizedDescriptionKey: @"Images different sizes", NSLocalizedDescriptionKey: errorDescription,
NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"referenceImage:%@, image:%@", NSLocalizedFailureReasonErrorKey: errorReason,
NSStringFromCGSize(referenceImage.size), FBReferenceImageKey: referenceImage,
NSStringFromCGSize(image.size)], FBCapturedImageKey: image,
FBDiffedImageKey: [referenceImage fb_diffWithImage:image],
}]; }];
} }
return NO; return NO;
@@ -279,11 +282,10 @@ typedef NS_ENUM(NSUInteger, FBTestSnapshotFileNameType) {
UIImage *snapshot = [self _imageForViewOrLayer:viewOrLayer]; UIImage *snapshot = [self _imageForViewOrLayer:viewOrLayer];
BOOL imagesSame = [self compareReferenceImage:referenceImage toImage:snapshot tolerance:tolerance error:errorPtr]; BOOL imagesSame = [self compareReferenceImage:referenceImage toImage:snapshot tolerance:tolerance error:errorPtr];
if (!imagesSame) { if (!imagesSame) {
[self saveFailedReferenceImage:referenceImage NSError *saveError = nil;
testImage:snapshot if ([self saveFailedReferenceImage:referenceImage testImage:snapshot selector:selector identifier:identifier error:&saveError] == NO) {
selector:selector NSLog(@"Error saving test images: %@", saveError);
identifier:identifier }
error:errorPtr];
} }
return imagesSame; return imagesSame;
} }
@@ -9,15 +9,15 @@
*/ */
public extension FBSnapshotTestCase { public extension FBSnapshotTestCase {
public func FBSnapshotVerifyView(view: UIView, identifier: String = "", suffixes: NSOrderedSet = FBSnapshotTestCaseDefaultSuffixes(), file: String = __FILE__, line: UInt = __LINE__) { public func FBSnapshotVerifyView(view: UIView, identifier: String = "", suffixes: NSOrderedSet = FBSnapshotTestCaseDefaultSuffixes(), tolerance: CGFloat = 0, file: StaticString = #file, line: UInt = #line) {
FBSnapshotVerifyViewOrLayer(view, identifier: identifier, suffixes: suffixes) FBSnapshotVerifyViewOrLayer(view, identifier: identifier, suffixes: suffixes, tolerance: tolerance, file: file, line: line)
} }
public func FBSnapshotVerifyLayer(layer: CALayer, identifier: String = "", suffixes: NSOrderedSet = FBSnapshotTestCaseDefaultSuffixes(), file: String = __FILE__, line: UInt = __LINE__) { public func FBSnapshotVerifyLayer(layer: CALayer, identifier: String = "", suffixes: NSOrderedSet = FBSnapshotTestCaseDefaultSuffixes(), tolerance: CGFloat = 0, file: StaticString = #file, line: UInt = #line) {
FBSnapshotVerifyViewOrLayer(layer, identifier: identifier, suffixes: suffixes) FBSnapshotVerifyViewOrLayer(layer, identifier: identifier, suffixes: suffixes, tolerance: tolerance, file: file, line: line)
} }
private func FBSnapshotVerifyViewOrLayer(viewOrLayer: AnyObject, identifier: String = "", suffixes: NSOrderedSet = FBSnapshotTestCaseDefaultSuffixes(), file: String = __FILE__, line: UInt = __LINE__) { private func FBSnapshotVerifyViewOrLayer(viewOrLayer: AnyObject, identifier: String = "", suffixes: NSOrderedSet = FBSnapshotTestCaseDefaultSuffixes(), tolerance: CGFloat = 0, file: StaticString = #file, line: UInt = #line) {
let envReferenceImageDirectory = self.getReferenceImageDirectoryWithDefault(FB_REFERENCE_IMAGE_DIR) let envReferenceImageDirectory = self.getReferenceImageDirectoryWithDefault(FB_REFERENCE_IMAGE_DIR)
var error: NSError? var error: NSError?
var comparisonSuccess = false var comparisonSuccess = false
@@ -27,7 +27,7 @@ public extension FBSnapshotTestCase {
let referenceImagesDirectory = "\(envReferenceImageDirectory)\(suffix)" let referenceImagesDirectory = "\(envReferenceImageDirectory)\(suffix)"
if viewOrLayer.isKindOfClass(UIView) { if viewOrLayer.isKindOfClass(UIView) {
do { do {
try compareSnapshotOfView(viewOrLayer as! UIView, referenceImagesDirectory: referenceImagesDirectory, identifier: identifier, tolerance: 0) try compareSnapshotOfView(viewOrLayer as! UIView, referenceImagesDirectory: referenceImagesDirectory, identifier: identifier, tolerance: tolerance)
comparisonSuccess = true comparisonSuccess = true
} catch let error1 as NSError { } catch let error1 as NSError {
error = error1 error = error1
@@ -35,7 +35,7 @@ public extension FBSnapshotTestCase {
} }
} else if viewOrLayer.isKindOfClass(CALayer) { } else if viewOrLayer.isKindOfClass(CALayer) {
do { do {
try compareSnapshotOfLayer(viewOrLayer as! CALayer, referenceImagesDirectory: referenceImagesDirectory, identifier: identifier, tolerance: 0) try compareSnapshotOfLayer(viewOrLayer as! CALayer, referenceImagesDirectory: referenceImagesDirectory, identifier: identifier, tolerance: tolerance)
comparisonSuccess = true comparisonSuccess = true
} catch let error1 as NSError { } catch let error1 as NSError {
error = error1 error = error1
@@ -58,7 +58,7 @@ public extension FBSnapshotTestCase {
} }
} }
func assert(assertion: Bool, message: String, file: String, line: UInt) { func assert(assertion: Bool, message: String, file: StaticString, line: UInt) {
if !assertion { if !assertion {
XCTFail(message, file: file, line: line) XCTFail(message, file: file, line: line)
} }
@@ -0,0 +1 @@
../../../Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h
@@ -0,0 +1 @@
../../../Expecta+Snapshots/ExpectaObject+FBSnapshotTest.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/EXPBlockDefinedMatcher.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/EXPDefines.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/EXPDoubleTuple.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/EXPExpect.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/EXPFloatTuple.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/EXPMatcher.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatcherHelpers.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+beCloseTo.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+beFalsy.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+beGreaterThan.h
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+beGreaterThanOrEqualTo.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+beIdenticalTo.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+beInTheRangeOf.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+beInstanceOf.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+beKindOf.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+beLessThan.h
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+beLessThanOrEqualTo.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+beNil.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+beSubclassOf.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+beSupersetOf.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+beTruthy.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+beginWith.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+conformTo.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+contain.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+endWith.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+equal.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+haveCountOf.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+match.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+postNotification.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+raise.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+raiseWithReason.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers+respondTo.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Matchers/EXPMatchers.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/EXPUnsupportedObject.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/Expecta.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/ExpectaObject.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/ExpectaSupport.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/NSObject+Expecta.h
+1
View File
@@ -0,0 +1 @@
../../../Expecta/Expecta/NSValue+Expecta.h
@@ -0,0 +1 @@
../../../FBSnapshotTestCase/FBSnapshotTestCase/FBSnapshotTestCase.h
@@ -0,0 +1 @@
../../../FBSnapshotTestCase/FBSnapshotTestCase/FBSnapshotTestCasePlatform.h
@@ -0,0 +1 @@
../../../FBSnapshotTestCase/FBSnapshotTestCase/FBSnapshotTestController.h
@@ -0,0 +1 @@
../../../FBSnapshotTestCase/FBSnapshotTestCase/Categories/UIApplication+StrictKeyWindow.h
+1
View File
@@ -0,0 +1 @@
../../../FBSnapshotTestCase/FBSnapshotTestCase/Categories/UIImage+Compare.h
+1
View File
@@ -0,0 +1 @@
../../../FBSnapshotTestCase/FBSnapshotTestCase/Categories/UIImage+Diff.h
+1
View File
@@ -0,0 +1 @@
../../../FBSnapshotTestCase/FBSnapshotTestCase/Categories/UIImage+Snapshot.h
+1
View File
@@ -0,0 +1 @@
../../../../../Pod/Classes/GradientButton.h
+1
View File
@@ -0,0 +1 @@
../../../PureLayout/PureLayout/PureLayout/ALView+PureLayout.h
+1
View File
@@ -0,0 +1 @@
../../../PureLayout/PureLayout/PureLayout/NSArray+PureLayout.h
@@ -0,0 +1 @@
../../../PureLayout/PureLayout/PureLayout/NSLayoutConstraint+PureLayout.h
+1
View File
@@ -0,0 +1 @@
../../../PureLayout/PureLayout/PureLayout/PureLayout+Internal.h
+1
View File
@@ -0,0 +1 @@
../../../PureLayout/PureLayout/PureLayout/PureLayout.h
+1
View File
@@ -0,0 +1 @@
../../../PureLayout/PureLayout/PureLayout/PureLayoutDefines.h
+1
View File
@@ -0,0 +1 @@
../../../Specta/Specta/Specta/SPTCallSite.h
+1
View File
@@ -0,0 +1 @@
../../../Specta/Specta/Specta/SPTCompiledExample.h
+1
View File
@@ -0,0 +1 @@
../../../Specta/Specta/Specta/SPTExample.h
+1
View File
@@ -0,0 +1 @@
../../../Specta/Specta/Specta/SPTExampleGroup.h
@@ -0,0 +1 @@
../../../Specta/Specta/Specta/SPTExcludeGlobalBeforeAfterEach.h
+1
View File
@@ -0,0 +1 @@
../../../Specta/Specta/Specta/SPTGlobalBeforeAfterEach.h
+1
View File
@@ -0,0 +1 @@
../../../Specta/Specta/Specta/SPTSharedExampleGroups.h
+1
View File
@@ -0,0 +1 @@
../../../Specta/Specta/Specta/SPTSpec.h
+1
View File
@@ -0,0 +1 @@
../../../Specta/Specta/Specta/SPTTestSuite.h
+1
View File
@@ -0,0 +1 @@
../../../Specta/Specta/Specta/Specta.h
+1
View File
@@ -0,0 +1 @@
../../../Specta/Specta/Specta/SpectaDSL.h
+1
View File
@@ -0,0 +1 @@
../../../Specta/Specta/Specta/SpectaTypes.h
+1
View File
@@ -0,0 +1 @@
../../../Specta/Specta/Specta/SpectaUtility.h
+1
View File
@@ -0,0 +1 @@
../../../Specta/Specta/Specta/XCTest+Private.h
+1
View File
@@ -0,0 +1 @@
../../../Specta/Specta/Specta/XCTestCase+Specta.h
+8 -3
View File
@@ -1,6 +1,6 @@
{ {
"name": "GradientButton", "name": "GradientButton",
"version": "0.1.0", "version": "0.2.0",
"summary": "GradientButton is a UIBUtton subclassing with gradient support", "summary": "GradientButton is a UIBUtton subclassing with gradient support",
"homepage": "https://github.com/giuseppenucifora/GradientButton", "homepage": "https://github.com/giuseppenucifora/GradientButton",
"license": "MIT", "license": "MIT",
@@ -9,7 +9,7 @@
}, },
"source": { "source": {
"git": "https://github.com/giuseppenucifora/GradientButton.git", "git": "https://github.com/giuseppenucifora/GradientButton.git",
"tag": "0.1.0" "tag": "0.2.0"
}, },
"platforms": { "platforms": {
"ios": "7.0" "ios": "7.0"
@@ -21,5 +21,10 @@
"Pod/Assets/*.png" "Pod/Assets/*.png"
] ]
}, },
"frameworks": "QuartzCore" "frameworks": "QuartzCore",
"dependencies": {
"PureLayout": [
]
}
} }
+14 -14
View File
@@ -1,14 +1,16 @@
PODS: PODS:
- Expecta (1.0.5) - Expecta (1.0.5)
- Expecta+Snapshots (2.0.0): - Expecta+Snapshots (3.0.0):
- Expecta (~> 1.0) - Expecta (~> 1.0)
- FBSnapshotTestCase/Core (~> 2.0.3) - FBSnapshotTestCase/Core (~> 2.0)
- FBSnapshotTestCase (2.0.7): - Specta (~> 1.0)
- FBSnapshotTestCase/SwiftSupport (= 2.0.7) - FBSnapshotTestCase (2.1.0):
- FBSnapshotTestCase/Core (2.0.7) - FBSnapshotTestCase/SwiftSupport (= 2.1.0)
- FBSnapshotTestCase/SwiftSupport (2.0.7): - FBSnapshotTestCase/Core (2.1.0)
- FBSnapshotTestCase/SwiftSupport (2.1.0):
- FBSnapshotTestCase/Core - FBSnapshotTestCase/Core
- GradientButton (0.1.0) - GradientButton (0.2.0):
- PureLayout
- PureLayout (3.0.1) - PureLayout (3.0.1)
- Specta (1.0.5) - Specta (1.0.5)
@@ -22,16 +24,14 @@ DEPENDENCIES:
EXTERNAL SOURCES: EXTERNAL SOURCES:
GradientButton: GradientButton:
:path: "../" :path: ../
SPEC CHECKSUMS: SPEC CHECKSUMS:
Expecta: e1c022fcd33910b6be89c291d2775b3fe27a89fe Expecta: e1c022fcd33910b6be89c291d2775b3fe27a89fe
Expecta+Snapshots: 29b38dd695bc72a0ed2bea833937d78df41943ba Expecta+Snapshots: c343f410c7a6392f3e22e78f94c44b6c0749a516
FBSnapshotTestCase: 7e85180d0d141a0cf472352edda7e80d7eaeb547 FBSnapshotTestCase: 366ecd378511d7716c79991cd8067d1eed23578d
GradientButton: a7372818b72063640a0b834938032cf3df2cea47 GradientButton: 7be2c4bc564d0cfe7c3043a4410723d95050cc0d
PureLayout: f35f5384c9c4e4479df041dbe33ad7577b71ddfb PureLayout: f35f5384c9c4e4479df041dbe33ad7577b71ddfb
Specta: ac94d110b865115fe60ff2c6d7281053c6f8e8a2 Specta: ac94d110b865115fe60ff2c6d7281053c6f8e8a2
PODFILE CHECKSUM: 630dfff3704fb33c3f204e868047b8f07051d5ba COCOAPODS: 0.39.0
COCOAPODS: 1.0.0.beta.2
+7631 -2169
View File
File diff suppressed because it is too large. Load diff
@@ -14,7 +14,7 @@
buildForArchiving = "YES"> buildForArchiving = "YES">
<BuildableReference <BuildableReference
BuildableIdentifier = 'primary' BuildableIdentifier = 'primary'
BlueprintIdentifier = '2DC32BF704B6802BAA6DA3B9' BlueprintIdentifier = 'A005A3C52F8B1643B0539EAB'
BlueprintName = 'GradientButton' BlueprintName = 'GradientButton'
ReferencedContainer = 'container:Pods.xcodeproj' ReferencedContainer = 'container:Pods.xcodeproj'
BuildableName = 'GradientButton.framework'> BuildableName = 'GradientButton.framework'>
@@ -1,7 +1,6 @@
FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public"
OTHER_LDFLAGS = -framework "Foundation" -framework "XCTest" OTHER_LDFLAGS = -framework "Foundation" -framework "XCTest"
PODS_ROOT = ${SRCROOT} PODS_ROOT = ${SRCROOT}
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES
SKIP_INSTALL = YES
@@ -7,7 +7,7 @@
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string> <string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string> <string>org.cocoapods.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleInfoDictionaryVersion</key> <key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string> <string>6.0</string>
<key>CFBundleName</key> <key>CFBundleName</key>
@@ -15,7 +15,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>FMWK</string> <string>FMWK</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>2.0.0</string> <string>3.0.0</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
+2 -3
View File
@@ -1,8 +1,7 @@
ENABLE_BITCODE = NO ENABLE_BITCODE = NO
FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Expecta" "${PODS_ROOT}/Headers/Public"
OTHER_LDFLAGS = -framework "Foundation" -framework "XCTest" OTHER_LDFLAGS = -framework "Foundation" -framework "XCTest"
PODS_ROOT = ${SRCROOT} PODS_ROOT = ${SRCROOT}
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES
SKIP_INSTALL = YES
+1 -1
View File
@@ -7,7 +7,7 @@
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string> <string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string> <string>org.cocoapods.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleInfoDictionaryVersion</key> <key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string> <string>6.0</string>
<key>CFBundleName</key> <key>CFBundleName</key>
@@ -1,9 +1,8 @@
ENABLE_BITCODE = NO ENABLE_BITCODE = NO
FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public"
OTHER_LDFLAGS = -framework "Foundation" -framework "QuartzCore" -framework "UIKit" -framework "XCTest" OTHER_LDFLAGS = -framework "Foundation" -framework "QuartzCore" -framework "UIKit" -framework "XCTest"
OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
PODS_ROOT = ${SRCROOT} PODS_ROOT = ${SRCROOT}
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES
SKIP_INSTALL = YES
@@ -7,7 +7,7 @@
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string> <string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string> <string>org.cocoapods.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleInfoDictionaryVersion</key> <key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string> <string>6.0</string>
<key>CFBundleName</key> <key>CFBundleName</key>
@@ -15,7 +15,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>FMWK</string> <string>FMWK</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>2.0.7</string> <string>2.1.0</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
@@ -1,6 +1,5 @@
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/GradientButton" "${PODS_ROOT}/Headers/Public"
OTHER_LDFLAGS = -framework "QuartzCore" OTHER_LDFLAGS = -framework "QuartzCore"
PODS_ROOT = ${SRCROOT} PODS_ROOT = ${SRCROOT}
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES
SKIP_INSTALL = YES
+2 -2
View File
@@ -7,7 +7,7 @@
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string> <string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string> <string>org.cocoapods.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleInfoDictionaryVersion</key> <key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string> <string>6.0</string>
<key>CFBundleName</key> <key>CFBundleName</key>
@@ -15,7 +15,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>FMWK</string> <string>FMWK</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>0.1.0</string> <string>0.2.0</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
@@ -1,24 +0,0 @@
<?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>en</string>
<key>CFBundleIdentifier</key>
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>0.1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>${CURRENT_PROJECT_VERSION}</string>
<key>NSPrincipalClass</key>
<string></string>
</dict>
</plist>
@@ -7,7 +7,7 @@
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string> <string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string> <string>org.cocoapods.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleInfoDictionaryVersion</key> <key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string> <string>6.0</string>
<key>CFBundleName</key> <key>CFBundleName</key>
@@ -36,4 +36,4 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Generated by CocoaPods - https://cocoapods.org Generated by CocoaPods - http://cocoapods.org
@@ -58,7 +58,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
</dict> </dict>
<dict> <dict>
<key>FooterText</key> <key>FooterText</key>
<string>Generated by CocoaPods - https://cocoapods.org</string> <string>Generated by CocoaPods - http://cocoapods.org</string>
<key>Title</key> <key>Title</key>
<string></string> <string></string>
<key>Type</key> <key>Type</key>
@@ -16,51 +16,44 @@ realpath() {
install_resource() install_resource()
{ {
if [[ "$1" = /* ]] ; then case $1 in
RESOURCE_PATH="$1"
else
RESOURCE_PATH="${PODS_ROOT}/$1"
fi
if [[ ! -e "$RESOURCE_PATH" ]] ; then
cat << EOM
error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script.
EOM
exit 1
fi
case $RESOURCE_PATH in
*.storyboard) *.storyboard)
echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT}" echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}"
ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}"
;; ;;
*.xib) *.xib)
echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT}" echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}"
ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}"
;; ;;
*.framework) *.framework)
echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
echo "rsync -av $RESOURCE_PATH ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
rsync -av "$RESOURCE_PATH" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
;; ;;
*.xcdatamodel) *.xcdatamodel)
echo "xcrun momc \"$RESOURCE_PATH\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\""
xcrun momc "$RESOURCE_PATH" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom"
;; ;;
*.xcdatamodeld) *.xcdatamodeld)
echo "xcrun momc \"$RESOURCE_PATH\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\""
xcrun momc "$RESOURCE_PATH" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd"
;; ;;
*.xcmappingmodel) *.xcmappingmodel)
echo "xcrun mapc \"$RESOURCE_PATH\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" echo "xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm\""
xcrun mapc "$RESOURCE_PATH" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm"
;; ;;
*.xcassets) *.xcassets)
ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") ABSOLUTE_XCASSET_FILE=$(realpath "${PODS_ROOT}/$1")
XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE")
;; ;;
/*)
echo "$1"
echo "$1" >> "$RESOURCES_TO_COPY"
;;
*) *)
echo "$RESOURCE_PATH" echo "${PODS_ROOT}/$1"
echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY"
;; ;;
esac esac
} }
@@ -98,5 +91,5 @@ then
fi fi
done <<<"$OTHER_XCASSETS" done <<<"$OTHER_XCASSETS"
printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
fi fi
@@ -3,4 +3,4 @@ LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_pa
OTHER_CFLAGS = $(inherited) -iquote "$CONFIGURATION_BUILD_DIR/GradientButton.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/PureLayout.framework/Headers" OTHER_CFLAGS = $(inherited) -iquote "$CONFIGURATION_BUILD_DIR/GradientButton.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/PureLayout.framework/Headers"
OTHER_LDFLAGS = $(inherited) -framework "GradientButton" -framework "PureLayout" OTHER_LDFLAGS = $(inherited) -framework "GradientButton" -framework "PureLayout"
PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods-GradientButton_Example PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods-GradientButton_Example
PODS_ROOT = ${SRCROOT}/Pods PODS_ROOT = ${SRCROOT}/Pods
Loaded 100 of 115 files, more files were not shown because too many files have changed in this diff. Show more