From e5be7c1f7c8c9e46c9e7b99f4e70e01ba73a5684 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Wed, 6 Dec 2023 22:37:52 -0800 Subject: [PATCH 1/5] fix: set appearance in iOS 17+ --- .../Categories/XCUIDevice+FBHelpers.m | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m b/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m index 5f138f381..327939e1e 100644 --- a/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m +++ b/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m @@ -329,6 +329,9 @@ - (BOOL)fb_performIOHIDEventWithPage:(unsigned int)page - (BOOL)fb_setAppearance:(FBUIInterfaceAppearance)appearance error:(NSError **)error { + // Check the 'setAppearanceMode' first since 'appearance' below was introcued with Xcode 14.3 + // but iOS 16.7 works with this 'setAppearanceMode' method. + // It is safe to check the old method first, then newer one. SEL selector = NSSelectorFromString(@"setAppearanceMode:"); if (nil != selector && [self respondsToSelector:selector]) { NSMethodSignature *signature = [self methodSignatureForSelector:selector]; @@ -339,6 +342,25 @@ - (BOOL)fb_setAppearance:(FBUIInterfaceAppearance)appearance error:(NSError **)e [invocation invoke]; return YES; } + + // For iOS 17+ + if ([self respondsToSelector:NSSelectorFromString(@"appearance")]) { + switch (appearance) { + case FBUIInterfaceAppearanceUnspecified: + self.appearance = XCUIDeviceAppearanceUnspecified; + return YES; + case FBUIInterfaceAppearanceLight: + self.appearance = XCUIDeviceAppearanceLight; + return YES; + case FBUIInterfaceAppearanceDark: + self.appearance = XCUIDeviceAppearanceDark; + return YES; + default: + [FBLogger logFmt:@"No matched appearance pattern with %lu", appearance]; + break; + } + } + return [[[FBErrorBuilder builder] withDescriptionFormat:@"Current Xcode SDK does not support appearance changing"] buildError:error]; From 87c82b23f3fac99007eab2271e0e69f76e04759b Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Wed, 6 Dec 2023 22:53:13 -0800 Subject: [PATCH 2/5] only xcode 15+ --- WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m b/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m index 327939e1e..67b359035 100644 --- a/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m +++ b/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m @@ -329,9 +329,6 @@ - (BOOL)fb_performIOHIDEventWithPage:(unsigned int)page - (BOOL)fb_setAppearance:(FBUIInterfaceAppearance)appearance error:(NSError **)error { - // Check the 'setAppearanceMode' first since 'appearance' below was introcued with Xcode 14.3 - // but iOS 16.7 works with this 'setAppearanceMode' method. - // It is safe to check the old method first, then newer one. SEL selector = NSSelectorFromString(@"setAppearanceMode:"); if (nil != selector && [self respondsToSelector:selector]) { NSMethodSignature *signature = [self methodSignatureForSelector:selector]; @@ -343,6 +340,7 @@ - (BOOL)fb_setAppearance:(FBUIInterfaceAppearance)appearance error:(NSError **)e return YES; } +#if __clang_major__ >= 15 // For iOS 17+ if ([self respondsToSelector:NSSelectorFromString(@"appearance")]) { switch (appearance) { @@ -360,6 +358,7 @@ - (BOOL)fb_setAppearance:(FBUIInterfaceAppearance)appearance error:(NSError **)e break; } } +#endif return [[[FBErrorBuilder builder] withDescriptionFormat:@"Current Xcode SDK does not support appearance changing"] From 16a0b511b71cc4d9d6fc7dbb4fd1122bb44e1c02 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Wed, 6 Dec 2023 23:21:38 -0800 Subject: [PATCH 3/5] set proper clang version --- WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m b/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m index 67b359035..9797f0aa3 100644 --- a/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m +++ b/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m @@ -340,7 +340,8 @@ - (BOOL)fb_setAppearance:(FBUIInterfaceAppearance)appearance error:(NSError **)e return YES; } -#if __clang_major__ >= 15 +#if __clang_major__ >= 14 && __clang_minor__ >= 0 && __clang_patchlevel__ >= 3 + // Xcode 14.3.1 can build these values. // For iOS 17+ if ([self respondsToSelector:NSSelectorFromString(@"appearance")]) { switch (appearance) { From 27677454e0a08f3a6d3ce4607c5ccac760e448f3 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Thu, 7 Dec 2023 00:25:25 -0800 Subject: [PATCH 4/5] simplify --- .../Categories/XCUIDevice+FBHelpers.m | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m b/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m index 9797f0aa3..df2d1fc6f 100644 --- a/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m +++ b/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m @@ -344,20 +344,8 @@ - (BOOL)fb_setAppearance:(FBUIInterfaceAppearance)appearance error:(NSError **)e // Xcode 14.3.1 can build these values. // For iOS 17+ if ([self respondsToSelector:NSSelectorFromString(@"appearance")]) { - switch (appearance) { - case FBUIInterfaceAppearanceUnspecified: - self.appearance = XCUIDeviceAppearanceUnspecified; - return YES; - case FBUIInterfaceAppearanceLight: - self.appearance = XCUIDeviceAppearanceLight; - return YES; - case FBUIInterfaceAppearanceDark: - self.appearance = XCUIDeviceAppearanceDark; - return YES; - default: - [FBLogger logFmt:@"No matched appearance pattern with %lu", appearance]; - break; - } + self.appearance = appearance; + return YES; } #endif From cda60aa13aa43cedaedbf3eea6d3e0ff4dbe9f76 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Thu, 7 Dec 2023 00:36:59 -0800 Subject: [PATCH 5/5] fix Xcode warning --- WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m b/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m index df2d1fc6f..b0b008348 100644 --- a/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m +++ b/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m @@ -340,11 +340,11 @@ - (BOOL)fb_setAppearance:(FBUIInterfaceAppearance)appearance error:(NSError **)e return YES; } -#if __clang_major__ >= 14 && __clang_minor__ >= 0 && __clang_patchlevel__ >= 3 +#if __clang_major__ >= 15 || (__clang_major__ >= 14 && __clang_minor__ >= 0 && __clang_patchlevel__ >= 3) // Xcode 14.3.1 can build these values. // For iOS 17+ if ([self respondsToSelector:NSSelectorFromString(@"appearance")]) { - self.appearance = appearance; + self.appearance = (XCUIDeviceAppearance) appearance; return YES; } #endif