From 4081d3ffa268236a2022d77717e0d6c4099609fb Mon Sep 17 00:00:00 2001 From: steve-sun-me <117430445+steve-sun-me@users.noreply.github.com> Date: Mon, 3 Apr 2023 15:10:39 -0700 Subject: [PATCH] Set animation speed for all windows (#1279) * Set animation speed for all windows * remove nslog * rename * rename * Swizzle init * change testing code back * set project level --- KIF.xcodeproj/project.pbxproj | 24 ++++++++++ Sources/KIF/Additions/NSObject+KIFSwizzle.h | 14 ++++++ Sources/KIF/Additions/NSObject+KIFSwizzle.m | 23 +++++++++ .../Additions/UIApplication-KIFAdditions.m | 4 +- Sources/KIF/Additions/UIWindow+KIFSwizzle.h | 12 +++++ Sources/KIF/Additions/UIWindow+KIFSwizzle.m | 48 +++++++++++++++++++ 6 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 Sources/KIF/Additions/NSObject+KIFSwizzle.h create mode 100644 Sources/KIF/Additions/NSObject+KIFSwizzle.m create mode 100644 Sources/KIF/Additions/UIWindow+KIFSwizzle.h create mode 100644 Sources/KIF/Additions/UIWindow+KIFSwizzle.m diff --git a/KIF.xcodeproj/project.pbxproj b/KIF.xcodeproj/project.pbxproj index 0b14c2e9a..0dd2ab00e 100644 --- a/KIF.xcodeproj/project.pbxproj +++ b/KIF.xcodeproj/project.pbxproj @@ -186,8 +186,16 @@ 85DB94741C5A5FE10025F83E /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85DB94711C5A5D430025F83E /* QuartzCore.framework */; }; 85DB94751C5A5FEA0025F83E /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85DB94711C5A5D430025F83E /* QuartzCore.framework */; }; 8E654FC429D79BD8007F7811 /* OffscreenTests_ViewTestActor.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E654FC329D79BD8007F7811 /* OffscreenTests_ViewTestActor.m */; }; + 8E654FCE29DA2FE7007F7811 /* UIWindow+KIFSwizzle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E654FCC29DA2FE7007F7811 /* UIWindow+KIFSwizzle.h */; }; + 8E654FCF29DA2FE7007F7811 /* UIWindow+KIFSwizzle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E654FCC29DA2FE7007F7811 /* UIWindow+KIFSwizzle.h */; }; + 8E654FD029DA2FE7007F7811 /* UIWindow+KIFSwizzle.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E654FCD29DA2FE7007F7811 /* UIWindow+KIFSwizzle.m */; }; + 8E654FD129DA2FE8007F7811 /* UIWindow+KIFSwizzle.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E654FCD29DA2FE7007F7811 /* UIWindow+KIFSwizzle.m */; }; 8EAA1EE229D3AF7A008F6029 /* OffscreenViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EAA1EE129D3AF7A008F6029 /* OffscreenViewController.m */; }; 8EAA1EE429D3B1F5008F6029 /* OffscreenTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EAA1EE329D3B1F5008F6029 /* OffscreenTests.m */; }; + 8EC2CB1F29DB3D3B001BE493 /* NSObject+KIFSwizzle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EC2CB1D29DB3D3B001BE493 /* NSObject+KIFSwizzle.h */; }; + 8EC2CB2029DB3D3B001BE493 /* NSObject+KIFSwizzle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EC2CB1D29DB3D3B001BE493 /* NSObject+KIFSwizzle.h */; }; + 8EC2CB2129DB3D3B001BE493 /* NSObject+KIFSwizzle.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EC2CB1E29DB3D3B001BE493 /* NSObject+KIFSwizzle.m */; }; + 8EC2CB2229DB3D3B001BE493 /* NSObject+KIFSwizzle.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EC2CB1E29DB3D3B001BE493 /* NSObject+KIFSwizzle.m */; }; 97E8A5CF1B0A62F700124E3B /* BackgroundViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 97E8A5CE1B0A62F700124E3B /* BackgroundViewController.m */; }; 97E8A5D11B0A63D100124E3B /* BackgroundTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 97E8A5D01B0A63D100124E3B /* BackgroundTests.m */; }; 9CC881A91AD4CE39002CD34C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB072B413971AEA008AF393 /* UIKit.framework */; }; @@ -405,8 +413,12 @@ 84D293B71A2C8DF700C10944 /* AddressBookUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBookUI.framework; path = System/Library/Frameworks/AddressBookUI.framework; sourceTree = SDKROOT; }; 85DB94711C5A5D430025F83E /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; 8E654FC329D79BD8007F7811 /* OffscreenTests_ViewTestActor.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OffscreenTests_ViewTestActor.m; sourceTree = ""; }; + 8E654FCC29DA2FE7007F7811 /* UIWindow+KIFSwizzle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIWindow+KIFSwizzle.h"; sourceTree = ""; }; + 8E654FCD29DA2FE7007F7811 /* UIWindow+KIFSwizzle.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIWindow+KIFSwizzle.m"; sourceTree = ""; }; 8EAA1EE129D3AF7A008F6029 /* OffscreenViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OffscreenViewController.m; sourceTree = ""; }; 8EAA1EE329D3B1F5008F6029 /* OffscreenTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OffscreenTests.m; sourceTree = ""; }; + 8EC2CB1D29DB3D3B001BE493 /* NSObject+KIFSwizzle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSObject+KIFSwizzle.h"; sourceTree = ""; }; + 8EC2CB1E29DB3D3B001BE493 /* NSObject+KIFSwizzle.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSObject+KIFSwizzle.m"; sourceTree = ""; }; 97E8A5CE1B0A62F700124E3B /* BackgroundViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BackgroundViewController.m; sourceTree = ""; }; 97E8A5D01B0A63D100124E3B /* BackgroundTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BackgroundTests.m; sourceTree = ""; }; 9CC881A21AD4CAAC002CD34C /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; @@ -651,6 +663,10 @@ 2229D54E25BEF47D0093296C /* UIWindow-KIFAdditions.m */, 2229D56E25BEF47D0093296C /* XCTestCase-KIFAdditions.h */, 2229D55C25BEF47D0093296C /* XCTestCase-KIFAdditions.m */, + 8E654FCC29DA2FE7007F7811 /* UIWindow+KIFSwizzle.h */, + 8E654FCD29DA2FE7007F7811 /* UIWindow+KIFSwizzle.m */, + 8EC2CB1D29DB3D3B001BE493 /* NSObject+KIFSwizzle.h */, + 8EC2CB1E29DB3D3B001BE493 /* NSObject+KIFSwizzle.m */, ); name = Additions; path = Sources/KIF/Additions; @@ -972,6 +988,7 @@ 22B1376C25D6E32700D88061 /* KIFTestCase.h in Headers */, 22B1373225D6E32700D88061 /* KIFUITestActor_Private.h in Headers */, 22B1375725D6E32700D88061 /* KIFUIObject.h in Headers */, + 8E654FCF29DA2FE7007F7811 /* UIWindow+KIFSwizzle.h in Headers */, 22B1375525D6E32700D88061 /* KIFUIViewTestActor.h in Headers */, 22B1375B25D6E32700D88061 /* CAAnimation+KIFAdditions.h in Headers */, 22B1375225D6E32700D88061 /* NSPredicate+KIFAdditions.h in Headers */, @@ -980,6 +997,7 @@ 22B1376225D6E32700D88061 /* UITableView-KIFAdditions.h in Headers */, 9CC967401AD4B1B600576D13 /* KIF.h in Headers */, 22B1373525D6E32700D88061 /* UIDatePicker+KIFAdditions.h in Headers */, + 8EC2CB2029DB3D3B001BE493 /* NSObject+KIFSwizzle.h in Headers */, 22B1376F25D6E32700D88061 /* KIFTestActor_Private.h in Headers */, 22B1375025D6E32700D88061 /* KIFTouchVisualizerView.h in Headers */, 22B1377925D6E32700D88061 /* KIFSystemTestActor.h in Headers */, @@ -1015,6 +1033,7 @@ 2229D5DE25BEF47D0093296C /* KIF.h in Headers */, 2229D5CE25BEF47D0093296C /* KIFTypist.h in Headers */, 2229D5A725BEF47D0093296C /* UITableView-KIFAdditions.h in Headers */, + 8EC2CB1F29DB3D3B001BE493 /* NSObject+KIFSwizzle.h in Headers */, 2229D5AB25BEF47D0093296C /* NSError-KIFAdditions.h in Headers */, 2229D5B825BEF47D0093296C /* UIScreen+KIFAdditions.h in Headers */, 2229D5AA25BEF47D0093296C /* UIView-KIFAdditions.h in Headers */, @@ -1029,6 +1048,7 @@ 2229D5B625BEF47D0093296C /* NSString+KIFAdditions.h in Headers */, 2229D5BC25BEF47D0093296C /* CAAnimation+KIFAdditions.h in Headers */, 2229D59525BEF47D0093296C /* KIFUITestActor-IdentifierTests.h in Headers */, + 8E654FCE29DA2FE7007F7811 /* UIWindow+KIFSwizzle.h in Headers */, 2229D59925BEF47D0093296C /* KIFTouchVisualizerView.h in Headers */, 2229D5C525BEF47D0093296C /* NSBundle-KIFAdditions.h in Headers */, 2229D59B25BEF47D0093296C /* KIFTouchVisualizerViewCoordinator.h in Headers */, @@ -1276,6 +1296,7 @@ 22B1375F25D6E32700D88061 /* KIFTextInputTraitsOverrides.m in Sources */, 22B1375925D6E32700D88061 /* NSError-KIFAdditions.m in Sources */, 22B1377025D6E32700D88061 /* CAAnimation+KIFAdditions.m in Sources */, + 8E654FD129DA2FE8007F7811 /* UIWindow+KIFSwizzle.m in Sources */, 22B1373325D6E32700D88061 /* NSPredicate+KIFAdditions.m in Sources */, 22B1376E25D6E32700D88061 /* IOHIDEvent+KIF.m in Sources */, 22B1375D25D6E32700D88061 /* UITableView-KIFAdditions.m in Sources */, @@ -1304,6 +1325,7 @@ 22B1373A25D6E32700D88061 /* KIFUIObject.m in Sources */, 22B1377425D6E32700D88061 /* KIFTestActor.m in Sources */, 22B1374C25D6E32700D88061 /* UIApplication-KIFAdditions.m in Sources */, + 8EC2CB2229DB3D3B001BE493 /* NSObject+KIFSwizzle.m in Sources */, 22B1375C25D6E32700D88061 /* KIFUITestActor-ConditionalTests.m in Sources */, 22B1376525D6E32700D88061 /* KIFTypist.m in Sources */, ); @@ -1321,6 +1343,7 @@ 2229D59725BEF47D0093296C /* KIFTouchVisualizerViewCoordinator.m in Sources */, 2229D5B125BEF47D0093296C /* XCTestCase-KIFAdditions.m in Sources */, 2229D5A225BEF47D0093296C /* CGGeometry-KIFAdditions.m in Sources */, + 8E654FD029DA2FE7007F7811 /* UIWindow+KIFSwizzle.m in Sources */, 2229D5BE25BEF47D0093296C /* UITableView-KIFAdditions.m in Sources */, 2229D5AF25BEF47D0093296C /* NSBundle-KIFAdditions.m in Sources */, 2229D59C25BEF47D0093296C /* KIFTouchVisualizerView.m in Sources */, @@ -1349,6 +1372,7 @@ 2229D5D925BEF47D0093296C /* KIFTestStepValidation.m in Sources */, 2229D5A525BEF47D0093296C /* UIView-Debugging.m in Sources */, 2229D5C125BEF47D0093296C /* NSError-KIFAdditions.m in Sources */, + 8EC2CB2129DB3D3B001BE493 /* NSObject+KIFSwizzle.m in Sources */, 2229D5B525BEF47D0093296C /* UIApplication-KIFAdditions.m in Sources */, 2229D5C025BEF47D0093296C /* UIEvent+KIFAdditions.m in Sources */, ); diff --git a/Sources/KIF/Additions/NSObject+KIFSwizzle.h b/Sources/KIF/Additions/NSObject+KIFSwizzle.h new file mode 100644 index 000000000..2267c48ea --- /dev/null +++ b/Sources/KIF/Additions/NSObject+KIFSwizzle.h @@ -0,0 +1,14 @@ +// +// NSObject+KIFSwizzle.h +// KIF +// +// Created by Steve Sun on 2023-04-03. +// + +#import + +@interface NSObject (KIFSwizzle) + ++ (void)swizzleSEL:(SEL)originalSEL withSEL:(SEL)swizzledSEL; + +@end diff --git a/Sources/KIF/Additions/NSObject+KIFSwizzle.m b/Sources/KIF/Additions/NSObject+KIFSwizzle.m new file mode 100644 index 000000000..dfcbd9788 --- /dev/null +++ b/Sources/KIF/Additions/NSObject+KIFSwizzle.m @@ -0,0 +1,23 @@ +// +// NSObject+KIFSwizzle.m +// KIF +// +// Created by Steve Sun on 2023-04-03. +// + +#import "NSObject+KIFSwizzle.h" +#import + +@implementation NSObject (KIFSwizzle) + ++ (void)swizzleSEL:(SEL)originalSEL withSEL:(SEL)swizzledSEL +{ + Class class = [self class]; + + Method originalMethod = class_getInstanceMethod(class, originalSEL); + Method swizzledMethod = class_getInstanceMethod(class, swizzledSEL); + + method_exchangeImplementations(originalMethod, swizzledMethod); +} + +@end diff --git a/Sources/KIF/Additions/UIApplication-KIFAdditions.m b/Sources/KIF/Additions/UIApplication-KIFAdditions.m index e02cfe1c9..cbc3e5fe9 100644 --- a/Sources/KIF/Additions/UIApplication-KIFAdditions.m +++ b/Sources/KIF/Additions/UIApplication-KIFAdditions.m @@ -147,7 +147,9 @@ - (float)animationSpeed - (void)setAnimationSpeed:(float)animationSpeed { - self.keyWindow.layer.speed = animationSpeed; + for (UIWindow *window in self.windows) { + window.layer.speed = animationSpeed; + } } #pragma mark - Screenshotting diff --git a/Sources/KIF/Additions/UIWindow+KIFSwizzle.h b/Sources/KIF/Additions/UIWindow+KIFSwizzle.h new file mode 100644 index 000000000..e03d4857e --- /dev/null +++ b/Sources/KIF/Additions/UIWindow+KIFSwizzle.h @@ -0,0 +1,12 @@ +// +// UIWindow+KIFAdditions.h +// KIF +// +// Created by Steve Sun on 2023-04-02. +// + +#import + +@interface UIWindow (KIFSwizzle) + +@end diff --git a/Sources/KIF/Additions/UIWindow+KIFSwizzle.m b/Sources/KIF/Additions/UIWindow+KIFSwizzle.m new file mode 100644 index 000000000..9273fae6b --- /dev/null +++ b/Sources/KIF/Additions/UIWindow+KIFSwizzle.m @@ -0,0 +1,48 @@ +// +// UIWindow+KIFAdditions.m +// KIF +// +// Created by Steve Sun on 2023-04-02. +// + +#import "UIWindow+KIFSwizzle.h" +#import "UIApplication-KIFAdditions.h" +#import "NSObject+KIFSwizzle.h" + +@implementation UIWindow (KIFSwizzle) + ++ (void)load +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + [self swizzleSEL:@selector(init) withSEL:@selector(swizzle_init)]; + [self swizzleSEL:@selector(becomeKeyWindow) withSEL:@selector(swizzle_becomeKeyWindow)]; + if (@available(iOS 13.0, *)) { + [self swizzleSEL:@selector(initWithWindowScene:) withSEL:@selector(swizzle_initWithWindowScene:)]; + } + }); +} + +- (instancetype)swizzle_initWithWindowScene:(UIWindowScene *)scene API_AVAILABLE(ios(13)) +{ + UIWindow *window = [self swizzle_initWithWindowScene:scene]; + window.layer.speed = [UIApplication sharedApplication].animationSpeed; + + return window; +} + +- (instancetype)swizzle_init +{ + UIWindow *window = [self swizzle_init]; + window.layer.speed = [UIApplication sharedApplication].animationSpeed; + + return window; +} + +- (void)swizzle_becomeKeyWindow +{ + [self swizzle_becomeKeyWindow]; + self.layer.speed = [UIApplication sharedApplication].animationSpeed; +} + +@end