Skip to content

Commit 01131c7

Browse files
committed
fix(ios): warnings of UIScene usage
1 parent a3beba7 commit 01131c7

File tree

10 files changed

+71
-55
lines changed

10 files changed

+71
-55
lines changed

docs/IOSMultipleScenesSupport.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ To support multiple scenes, these are two steps need to setup in your Xcode proj
6666
return [super application:application didFinishLaunchingWithOptions:launchOptions];
6767
}
6868

69-
+- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options {
69+
+- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options API_AVAILABLE(ios(13.0)) {
7070
+ UISceneConfiguration * configuration =
7171
+ [RNExternalAppDelegateUtil application:application
7272
+ configurationForConnectingSceneSession:connectingSceneSession

packages/IPadMultiScenesHeadlessExample/ios/IPadMultiScenesHeadlessExample/AppDelegate.mm

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
1717
return [super application:application didFinishLaunchingWithOptions:launchOptions];
1818
}
1919

20-
- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options {
20+
- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options API_AVAILABLE(ios(13.0)) {
2121
UISceneConfiguration * configuration =
2222
[RNExternalAppDelegateUtil application:application
2323
configurationForConnectingSceneSession:connectingSceneSession

packages/IPadMultiScenesHeadlessExample/ios/Podfile.lock

+2-2
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ PODS:
415415
- React-jsi (= 0.71.11)
416416
- React-logger (= 0.71.11)
417417
- React-perflogger (= 0.71.11)
418-
- RNExternalDisplay (0.6.0-rc.4):
418+
- RNExternalDisplay (0.6.0):
419419
- React-Core
420420
- SocketRocket (0.6.0)
421421
- Yoga (1.14.0)
@@ -625,7 +625,7 @@ SPEC CHECKSUMS:
625625
React-RCTVibration: f09f08de63e4122deb32506e20ca4cae6e4e14c1
626626
React-runtimeexecutor: 4817d63dbc9d658f8dc0ec56bd9b83ce531129f0
627627
ReactCommon: 08723d2ed328c5cbcb0de168f231bc7bae7f8aa1
628-
RNExternalDisplay: f51ffbbd9deafb651f2ccbfcc7957c9361788ee2
628+
RNExternalDisplay: 9f029092780c7b6cf29ddf5ffb271a435a17bee5
629629
SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608
630630
Yoga: f7decafdc5e8c125e6fa0da38a687e35238420fa
631631
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a

packages/RNExternalDisplayExample/ios/Podfile.lock

+2-2
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ PODS:
415415
- React-jsi (= 0.71.11)
416416
- React-logger (= 0.71.11)
417417
- React-perflogger (= 0.71.11)
418-
- RNExternalDisplay (0.6.0-rc.4):
418+
- RNExternalDisplay (0.6.0):
419419
- React-Core
420420
- RNGestureHandler (2.12.0):
421421
- React-Core
@@ -630,7 +630,7 @@ SPEC CHECKSUMS:
630630
React-RCTVibration: f09f08de63e4122deb32506e20ca4cae6e4e14c1
631631
React-runtimeexecutor: 4817d63dbc9d658f8dc0ec56bd9b83ce531129f0
632632
ReactCommon: 08723d2ed328c5cbcb0de168f231bc7bae7f8aa1
633-
RNExternalDisplay: f51ffbbd9deafb651f2ccbfcc7957c9361788ee2
633+
RNExternalDisplay: 9f029092780c7b6cf29ddf5ffb271a435a17bee5
634634
RNGestureHandler: dec4645026e7401a0899f2846d864403478ff6a5
635635
SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608
636636
Yoga: f7decafdc5e8c125e6fa0da38a687e35238420fa

packages/RNExternalDisplayExample/ios/RNExternalDisplayExample/AppDelegate.mm

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
1717
return [super application:application didFinishLaunchingWithOptions:launchOptions];
1818
}
1919

20-
- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options {
20+
- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options API_AVAILABLE(ios(13.0)) {
2121
UISceneConfiguration * configuration =
2222
[RNExternalAppDelegateUtil application:application
2323
configurationForConnectingSceneSession:connectingSceneSession

packages/RNExternalDisplayFabricExample/ios/Podfile.lock

+2-2
Original file line numberDiff line numberDiff line change
@@ -756,7 +756,7 @@ PODS:
756756
- React-jsi (= 0.71.11)
757757
- React-logger (= 0.71.11)
758758
- React-perflogger (= 0.71.11)
759-
- RNExternalDisplay (0.6.0-rc.4):
759+
- RNExternalDisplay (0.6.0):
760760
- RCT-Folly
761761
- RCTRequired
762762
- RCTTypeSafety
@@ -1000,7 +1000,7 @@ SPEC CHECKSUMS:
10001000
React-rncore: fcf3558280eaeac247a24b81c8715aa351ae3172
10011001
React-runtimeexecutor: 4817d63dbc9d658f8dc0ec56bd9b83ce531129f0
10021002
ReactCommon: 08723d2ed328c5cbcb0de168f231bc7bae7f8aa1
1003-
RNExternalDisplay: ecb0228391396f9e27365876cc51297df83d18c6
1003+
RNExternalDisplay: 0d5fbf4a5e1c0e3bbb5ae501f46d54bbe527da25
10041004
RNGestureHandler: d8224aad6d7081834ae6e6cf925397059485b69e
10051005
SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608
10061006
Yoga: f7decafdc5e8c125e6fa0da38a687e35238420fa

packages/RNExternalDisplayFabricExample/ios/RNExternalDisplayFabricExample/AppDelegate.mm

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
1717
return [super application:application didFinishLaunchingWithOptions:launchOptions];
1818
}
1919

20-
- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options {
20+
- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options API_AVAILABLE(ios(13.0)) {
2121
UISceneConfiguration * configuration =
2222
[RNExternalAppDelegateUtil application:application
2323
configurationForConnectingSceneSession:connectingSceneSession

packages/react-native-external-display/ios/RNExternalDisplayEvent.mm

+54-38
Original file line numberDiff line numberDiff line change
@@ -55,24 +55,28 @@ - (NSDictionary *)constantsToExport
5555
reject(@"error", @"Not supported multiple scenes", nil);
5656
return;
5757
}
58-
if (options[@"userInfo"] && ![options[@"userInfo"] isKindOfClass:[NSDictionary class]]) {
59-
reject(@"error", @"options.userInfo must be object", nil);
60-
return;
61-
}
62-
NSMutableDictionary *userInfo = [options[@"userInfo"] mutableCopy];
63-
if (!userInfo) userInfo = [NSMutableDictionary new];
64-
if (options[@"windowBackgroundColor"]) {
65-
userInfo[@"windowBackgroundColor"] = options[@"windowBackgroundColor"];
58+
if (@available(iOS 13.0, tvOS 13.0, *)) {
59+
if (options[@"userInfo"] && ![options[@"userInfo"] isKindOfClass:[NSDictionary class]]) {
60+
reject(@"error", @"options.userInfo must be object", nil);
61+
return;
62+
}
63+
NSMutableDictionary *userInfo = [options[@"userInfo"] mutableCopy];
64+
if (!userInfo) userInfo = [NSMutableDictionary new];
65+
if (options[@"windowBackgroundColor"]) {
66+
userInfo[@"windowBackgroundColor"] = options[@"windowBackgroundColor"];
67+
}
68+
NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:RN_EXTERNAL_SCENE_TYPE_CREATE];
69+
userActivity.userInfo = userInfo;
70+
[UIApplication.sharedApplication
71+
requestSceneSessionActivation:nil
72+
userActivity:userActivity
73+
options:nil
74+
errorHandler:nil // NOTE: No completion handler here so it is hard to use promise
75+
];
76+
resolve(@YES);
77+
} else {
78+
reject(@"error", @"Required iOS 13.0 or above", nil);
6679
}
67-
NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:RN_EXTERNAL_SCENE_TYPE_CREATE];
68-
userActivity.userInfo = userInfo;
69-
[UIApplication.sharedApplication
70-
requestSceneSessionActivation:nil
71-
userActivity:userActivity
72-
options:nil
73-
errorHandler:nil // NOTE: No completion handler here so it is hard to use promise
74-
];
75-
resolve(@YES);
7680
});
7781
}
7882

@@ -82,19 +86,23 @@ - (NSDictionary *)constantsToExport
8286
reject(@"error", @"Not supported multiple scenes", nil);
8387
return;
8488
}
85-
NSSet *scenes = [UIApplication sharedApplication].connectedScenes;
86-
for (UIWindowScene* scene in scenes) {
87-
if ([scene.session.persistentIdentifier isEqual:sceneId]) {
88-
[UIApplication.sharedApplication
89-
requestSceneSessionDestruction:scene.session
90-
options:nil
91-
errorHandler:nil // NOTE: No completion handler here so it is hard to use promise
92-
];
93-
resolve(@YES);
94-
return;
89+
if (@available(iOS 13.0, tvOS 13.0, *)) {
90+
NSSet *scenes = [UIApplication sharedApplication].connectedScenes;
91+
for (UIWindowScene* scene in scenes) {
92+
if ([scene.session.persistentIdentifier isEqual:sceneId]) {
93+
[UIApplication.sharedApplication
94+
requestSceneSessionDestruction:scene.session
95+
options:nil
96+
errorHandler:nil // NOTE: No completion handler here so it is hard to use promise
97+
];
98+
resolve(@YES);
99+
return;
100+
}
95101
}
102+
reject(@"error", @"No scene found", nil);
103+
} else {
104+
reject(@"error", @"Required iOS 13.0 or above", nil);
96105
}
97-
reject(@"error", @"No scene found", nil);
98106
});
99107
}
100108

@@ -104,7 +112,12 @@ - (NSDictionary *)constantsToExport
104112
reject(@"error", @"Not supported multiple scenes", nil);
105113
return;
106114
}
107-
resolve(@([RNExternalAppDelegateUtil isMainSceneActive]));
115+
116+
if (@available(iOS 13.0, tvOS 13.0, *)) {
117+
resolve(@([RNExternalAppDelegateUtil isMainSceneActive]));
118+
} else {
119+
reject(@"error", @"Required iOS 13.0 or above", nil);
120+
}
108121
});
109122
}
110123

@@ -114,13 +127,17 @@ - (NSDictionary *)constantsToExport
114127
reject(@"error", @"Not supported multiple scenes", nil);
115128
return;
116129
}
117-
[UIApplication.sharedApplication
118-
requestSceneSessionActivation:nil
119-
userActivity:nil // No activity as main scene
120-
options:nil
121-
errorHandler:nil // NOTE: No completion handler here so it is hard to use promise
122-
];
123-
resolve(@YES);
130+
if (@available(iOS 13.0, tvOS 13.0, *)) {
131+
[UIApplication.sharedApplication
132+
requestSceneSessionActivation:nil
133+
userActivity:nil // No activity as main scene
134+
options:nil
135+
errorHandler:nil // NOTE: No completion handler here so it is hard to use promise
136+
];
137+
resolve(@YES);
138+
} else {
139+
reject(@"error", @"Required iOS 13.0 or above", nil);
140+
}
124141
});
125142
}
126143

@@ -132,8 +149,7 @@ -(NSArray *)supportedEvents {
132149
];
133150
}
134151

135-
// iOS 13+ only
136-
-(NSDictionary *)getUISceneInfo {
152+
-(NSDictionary *)getUISceneInfo API_AVAILABLE(ios(13.0)) {
137153
NSSet *scenes = [UIApplication sharedApplication].connectedScenes;
138154
NSMutableDictionary *screenInfo = [[NSMutableDictionary alloc] init];
139155
for (UIWindowScene* scene in scenes) {

packages/react-native-external-display/ios/RNExternalDisplayUtils.mm

+6-5
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ @implementation RNExternalSceneMainDelegate
3737

3838
@synthesize window = _window;
3939

40-
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
40+
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions API_AVAILABLE(ios(13.0)) {
4141
UIApplication *app = [UIApplication sharedApplication];
4242

4343
UIWindowScene *windowScene = (UIWindowScene *)scene;
@@ -55,7 +55,7 @@ @implementation RNExternalSceneDelegate
5555

5656
@synthesize window = _window;
5757

58-
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
58+
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions API_AVAILABLE(ios(13.0)) {
5959
NSMutableDictionary *userInfo = [connectionOptions.userActivities.anyObject.userInfo mutableCopy];
6060
if (!userInfo) userInfo = [NSMutableDictionary new];
6161

@@ -101,6 +101,7 @@ + (UISceneConfiguration *)application:(UIApplication *)application
101101
configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession
102102
options:(UISceneConnectionOptions *)connectionOptions
103103
sceneOptions:(NSDictionary *)sceneOptions
104+
API_AVAILABLE(ios(13.0))
104105
{
105106
NSUserActivity *userActivity = connectionOptions.userActivities.anyObject;
106107
NSString* activityType = userActivity.activityType;
@@ -123,7 +124,7 @@ + (UISceneConfiguration *)application:(UIApplication *)application
123124
return configuration;
124125
}
125126

126-
+ (bool)isMainSceneActive {
127+
+ (bool)isMainSceneActive API_AVAILABLE(ios(13.0)) {
127128
NSSet *scenes = [UIApplication sharedApplication].connectedScenes;
128129
bool isMainActive = false;
129130
for (UIScene *scene in scenes) {
@@ -137,15 +138,15 @@ + (bool)isMainSceneActive {
137138
return isMainActive;
138139
}
139140

140-
+ (NSString *)getSceneType:(UIScene *)scene {
141+
+ (NSString *)getSceneType:(UIScene *)scene API_AVAILABLE(ios(13.0)) {
141142
NSString* type = nil;
142143
if ([scene.session.userInfo isKindOfClass:[NSDictionary class]]) {
143144
type = scene.session.userInfo[RN_EXTERNAL_SCENE_TYPE_KEY];
144145
}
145146
return type;
146147
}
147148

148-
+ (bool)isUsedSceneType:(UIScene *)scene {
149+
+ (bool)isUsedSceneType:(UIScene *)scene API_AVAILABLE(ios(13.0)) {
149150
if (scene == nil) return false;
150151
NSString* type = [self getSceneType:scene];
151152
return type != nil;

packages/react-native-external-display/ios/RNExternalDisplayView.mm

+1-2
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,7 @@ - (UIWindow *)getScreenWindow {
126126
return _window;
127127
}
128128

129-
// iOS 13+ only
130-
- (UIWindow *)getSceneWindow {
129+
- (UIWindow *)getSceneWindow API_AVAILABLE(ios(13.0)) {
131130
NSSet *scenes = [UIApplication sharedApplication].connectedScenes;
132131

133132
UIWindowScene* scene = [[scenes filteredSetUsingPredicate:[NSPredicate predicateWithFormat:@"session.persistentIdentifier == %@", _screen]] anyObject];

0 commit comments

Comments
 (0)