Skip to content

Commit a8fa669

Browse files
authored
feat(macos): add react-native-macos port (#268)
1 parent b598898 commit a8fa669

File tree

7 files changed

+39
-18
lines changed

7 files changed

+39
-18
lines changed

README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,11 @@ async function onAppleButtonPress() {
220220
```
221221

222222

223+
### MacOS
224+
225+
This library works on MacOS 10.15+ if using in conjunction with [react-native-macos](https://github.com/microsoft/react-native-macos).
226+
227+
223228
### Web (not react-native-web, but that may come as a follow-on, this is pure web at the moment)
224229

225230
#### 1. Initial set-up
@@ -327,7 +332,7 @@ All API documentation is generated by typedoc, and [is available in the `typedoc
327332
// other fields are available, but full name is not
328333
const { email, email_verified, is_private_email, sub } = jwt_decode(appleAuthRequestResponse.identityToken)
329334
```
330-
335+
331336
## Troubleshooting
332337

333338
```

RNAppleAuthentication.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Pod::Spec.new do |s|
1313
s.authors = "Invertase Limited"
1414
s.source = { :git => "https://github.com/invertase/react-native-apple-authentication.git", :tag => "v#{s.version}" }
1515
s.social_media_url = 'http://twitter.com/invertaseio'
16-
s.ios.deployment_target = "9.0"
16+
s.platforms = { :ios => "9.0", :osx => "10.15" }
1717
s.source_files = 'ios/**/*.{h,m}'
1818
s.dependency 'React-Core'
1919
s.static_framework = true

ios/RNAppleAuthentication/RNAppleAuthASAuthorizationDelegates.m

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,11 @@ - (instancetype)initWithCompletion:(void (^)(NSError *error, NSDictionary *autho
3131
#pragma mark - ASAuthorizationControllerPresentationContextProviding Methods
3232

3333
- (ASPresentationAnchor)presentationAnchorForAuthorizationController:(ASAuthorizationController *)controller {
34-
return [[UIApplication sharedApplication] keyWindow];
34+
#if TARGET_OS_OSX
35+
return [[NSApplication sharedApplication] keyWindow];
36+
#else
37+
return [[UIApplication sharedApplication] keyWindow];
38+
#endif
3539
}
3640

3741
#pragma mark - ASAuthorizationControllerDelegate Methods

ios/RNAppleAuthentication/RNAppleAuthButtonView.m

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,12 @@ @implementation RNAppleAuthButtonView
2121

2222
- (instancetype)initWithAuthorizationButtonType:(ASAuthorizationAppleIDButtonType)type authorizationButtonStyle:(ASAuthorizationAppleIDButtonStyle)style {
2323
if (self = [super initWithAuthorizationButtonType:type authorizationButtonStyle:style]) {
24+
#if TARGET_OS_OSX
25+
[self setTarget:self];
26+
[self setAction:@selector(onAppleIDButtonPress)];
27+
#else
2428
[self addTarget:self action:@selector(onAppleIDButtonPress) forControlEvents:UIControlEventTouchUpInside];
29+
#endif
2530
}
2631

2732
return self;

ios/RNAppleAuthentication/RNAppleAuthButtonViewManager.m

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@
1818
#import <React/RCTViewManager.h>
1919
#import "RNAppleAuthButtonView.h"
2020

21+
#if TARGET_OS_OSX
22+
@compatibility_alias RNCPView NSView;
23+
#else
24+
@compatibility_alias RNCPView UIView;
25+
#endif
26+
2127
/* -------------------------
2228
* White
2329
* ------------------------- */
@@ -36,7 +42,7 @@ @implementation RNAppleAuthButtonViewManagerWhiteSignIn
3642
view.cornerRadius = [json floatValue];
3743
}
3844

39-
- (UIView *)view {
45+
- (RNCPView *)view {
4046
return [[RNAppleAuthButtonView alloc] initWithAuthorizationButtonType:ASAuthorizationAppleIDButtonTypeSignIn authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleWhite];
4147
}
4248
@end
@@ -55,7 +61,7 @@ @implementation RNAppleAuthButtonViewManagerWhiteContinue
5561
view.cornerRadius = [json floatValue];
5662
}
5763

58-
- (UIView *)view {
64+
- (RNCPView *)view {
5965
return [[RNAppleAuthButtonView alloc] initWithAuthorizationButtonType:ASAuthorizationAppleIDButtonTypeContinue authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleWhite];
6066
}
6167
@end
@@ -70,9 +76,9 @@ @implementation RNAppleAuthButtonViewManagerWhiteSignUp
7076
view.cornerRadius = [json floatValue];
7177
}
7278

73-
- (UIView *)view {
79+
- (RNCPView *)view {
7480
ASAuthorizationAppleIDButtonType type = ASAuthorizationAppleIDButtonTypeDefault;
75-
if (@available(iOS 13.2, *)) {
81+
if (@available(iOS 13.2, macOS 10.15.1, *)) {
7682
type = ASAuthorizationAppleIDButtonTypeSignUp;
7783
}
7884
return [[RNAppleAuthButtonView alloc] initWithAuthorizationButtonType:type authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleWhite];
@@ -97,7 +103,7 @@ @implementation RNAppleAuthButtonViewManagerWhiteOutlineSignIn
97103
view.cornerRadius = [json floatValue];
98104
}
99105

100-
- (UIView *)view {
106+
- (RNCPView *)view {
101107
return [[RNAppleAuthButtonView alloc] initWithAuthorizationButtonType:ASAuthorizationAppleIDButtonTypeSignIn authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleWhiteOutline];
102108
}
103109
@end
@@ -116,7 +122,7 @@ @implementation RNAppleAuthButtonViewManagerWhiteOutlineContinue
116122
view.cornerRadius = [json floatValue];
117123
}
118124

119-
- (UIView *)view {
125+
- (RNCPView *)view {
120126
return [[RNAppleAuthButtonView alloc] initWithAuthorizationButtonType:ASAuthorizationAppleIDButtonTypeContinue authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleWhiteOutline];
121127
}
122128
@end
@@ -130,9 +136,9 @@ @implementation RNAppleAuthButtonViewManagerWhiteOutlineSignUp
130136
view.cornerRadius = [json floatValue];
131137
}
132138

133-
- (UIView *)view {
139+
- (RNCPView *)view {
134140
ASAuthorizationAppleIDButtonType type = ASAuthorizationAppleIDButtonTypeDefault;
135-
if (@available(iOS 13.2, *)) {
141+
if (@available(iOS 13.2, macOS 10.15.1, *)) {
136142
type = ASAuthorizationAppleIDButtonTypeSignUp;
137143
}
138144
return [[RNAppleAuthButtonView alloc] initWithAuthorizationButtonType:type authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleWhiteOutline];
@@ -158,7 +164,7 @@ @implementation RNAppleAuthButtonViewManagerBlackSignIn
158164
view.cornerRadius = [json floatValue];
159165
}
160166

161-
- (UIView *)view {
167+
- (RNCPView *)view {
162168
return [[RNAppleAuthButtonView alloc] initWithAuthorizationButtonType:ASAuthorizationAppleIDButtonTypeSignIn authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleBlack];
163169
}
164170
@end
@@ -177,7 +183,7 @@ @implementation RNAppleAuthButtonViewManagerBlackContinue
177183
view.cornerRadius = [json floatValue];
178184
}
179185

180-
- (UIView *)view {
186+
- (RNCPView *)view {
181187
return [[RNAppleAuthButtonView alloc] initWithAuthorizationButtonType:ASAuthorizationAppleIDButtonTypeContinue authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleBlack];
182188
}
183189
@end
@@ -191,12 +197,11 @@ @implementation RNAppleAuthButtonViewManagerBlackSignUp
191197
RCT_CUSTOM_VIEW_PROPERTY(cornerRadius, NSNumber *, RNAppleAuthButtonView) {
192198
view.cornerRadius = [json floatValue];
193199
}
194-
- (UIView *)view {
200+
- (RNCPView *)view {
195201
ASAuthorizationAppleIDButtonType type = ASAuthorizationAppleIDButtonTypeDefault;
196-
if (@available(iOS 13.2, *)) {
202+
if (@available(iOS 13.2, macOS 10.15.1, *)) {
197203
type = ASAuthorizationAppleIDButtonTypeSignUp;
198204
}
199205
return [[RNAppleAuthButtonView alloc] initWithAuthorizationButtonType:type authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleBlack];
200206
}
201207
@end
202-

ios/RNAppleAuthentication/RNAppleAuthModule.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ + (BOOL)requiresMainQueueSetup {
4040

4141
- (NSDictionary *)constantsToExport {
4242
return @{
43-
@"isSupported": @available(iOS 13.0, *) ? @(YES) : @(NO),
44-
@"isSignUpButtonSupported": @available(iOS 13.2, *) ? @(YES) : @(NO),
43+
@"isSupported": @available(iOS 13.0, macOS 10.15, *) ? @(YES) : @(NO),
44+
@"isSignUpButtonSupported": @available(iOS 13.2, macOS 10.15.1, *) ? @(YES) : @(NO),
4545
};
4646
}
4747

lib/AppleButton.macos.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
import AppleButton from './AppleButton.ios'
2+
export default AppleButton

0 commit comments

Comments
 (0)