React Native ์นด์นด์ค ๋ก๊ทธ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์
๋๋ค. @react-native-seoul/kakao-login
< 3.0 ์ดํ ๋ฒ์ ์ ์ฐ์๋ ๋ถ๋ค์ DEPRECATED README๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
์ธ๋ถ ์์ ๋ KakaoLoginExample ํด๋ ์์ ์์ ํ๋ก์ ํธ๋ฅผ ํ์ธํด์ฃผ์ธ์.
ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ flow
์ typescript
๋ฅผ ์ง์ํฉ๋๋ค.
์นด์นด์ค ๋ก๊ทธ์ธ Example Project ๋ฐ๋ชจ ํ๋ฉด
์ ํ๋ก์ ํธ๋
KakaoLoginExample
ํด๋์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์ฑ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํด์ Youtube ์์์ ์ ์ํ์ต๋๋ค.
ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ 3.0.0
์ดํ ๋ถํฐ๋ react-native 0.61
์ด์์ ์ง์ํฉ๋๋ค. ์นด์นด์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์์ด ์๋ ๋ฒ์ ๋ถํฐ๋ ์ง์์ด ๋๊ธธ ์์ ์ด๋ฏ๋ก ์ฐธ๊ณ ํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ๊ณผ๊ฑฐ์๋ ์นด์นด์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ ๊ฑฐ์ iOS์ ์นด์นด์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ ๊ฑฐ์ Android ๋ฒ์ ์ ์ฐ๊ณ ์์์ต๋๋ค.
yarn add @react-native-seoul/kakao-login
React Native 0.60.X์ด์๋ถํฐ๋ Auto linking
์ ์ง์ํฉ๋๋ค. ๋ฐ๋ผ์ ์ค์น๋ ๋งค์ฐ ๊ฐํธํฉ๋๋ค.
iOS์ ๊ฒฝ์ฐ yarn add @react-native-seoul/kakao-login
์ดํ npx pod-install
๋ช
๋ น์ด๋ก pod ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ์ถ๊ฐ๋ก ์ค์นํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
์ค์น๊ฐ ์ ๋๋ก ๋์ง ์๋๋ค๋ฉด example project์ ์ค์ ์ ์ฐธ๊ณ ํ์ธ์ ๐
-
Pod์์ iOS deployment target์ด
13.0
์ด์์ด์ด์ผ ํฉ๋๋ค. -
ios ์นด์นด์ค sdk ์ค์น ํ์ ์ค์ ๊ณผ ๊ด๋ จํด์๋ ๊ณต์๋ฌธ์ - ์นด์นด์ค ๋ก๊ทธ์ธ > ์ค์ ํ๊ธฐ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์. ํด๋น ๊ฐ์ด๋๋ฅผ ํตํด ์นด์นด์ค ๊ฐ๋ฐ์ ํ์ด์ง์์ ๋ณธ์ธ์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์์ฑํด์ฃผ์ธ์.
-
๊ณต์๋ฌธ์ - ๊ฐ๋ฐ ํ๋ก์ ํธ ์ค์ ์ ์ฐธ๊ณ ํ์ฌ
info.plist
,URL Types
๋ฐ ์ปค์คํ ์คํด ์ถ๊ฐ ๋ฑ ๊ธฐํ ํ์ํ ์ธํ ๋ค์ ํ๋ก์ ํธ์ ์ถ๊ฐํด์ค๋๋ค. ์๋์นด์นด์ค ๋ค์ดํฐ๋ธ์ฑ ์์ด๋๋ฅผ ์ ์ด์ฃผ์ธ์
๋ฌธ๊ตฌ๋ฅผ ์ ํ์ธํ์์ฌ ๋ณธ์ธ์ Kakao App Key๋ก ๋ณ๊ฒฝํด์ฃผ์ธ์.
<key>CFBundleURLTypes</key>
<array>
+ <dict>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ <key>CFBundleURLSchemes</key>
+ <array>
+ <string>kakao{์นด์นด์ค ๋ค์ดํฐ๋ธ์ฑ ์์ด๋๋ฅผ ์ ์ด์ฃผ์ธ์}</string>
+ </array>
+ </dict>
</array>
<key>CFBundleVersion</key>
<string>1</string>
+ <key>KAKAO_APP_KEY</key>
+ <string>{์นด์นด์ค ๋ค์ดํฐ๋ธ์ฑ ์์ด๋๋ฅผ ์ ์ด์ฃผ์ธ์}</string>
+ <key>KAKAO_APP_SCHEME</key> // ์ ํ ์ฌํญ ๋ฉํฐ ํ๋ซํผ ์ฑ ๊ตฌํ ์์๋ง ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค
+ <string>{์นด์นด์ค ์ฑ ์คํด์ ์ ์ด์ฃผ์ธ์}</string> // ์ ํ ์ฌํญ
+ <key>LSApplicationQueriesSchemes</key>
+ <array>
+ <string>kakaokompassauth</string>
+ <string>storykompassauth</string>
+ <string>kakaolink</string>
+ </array>
-
3.0.0
๋ฒ์ ๋ถํฐ๋ swift ๋ฒ์ ์ kakao sdk๋ฅผ ํ์ฉํ๋ฏ๋ก Swift Bridging Header๋ฅผ ์ถ๊ฐํด์ผํ ์ ์์ต๋๋ค. -
AppDelegate.m
ํ์ผ์ ํด๋น ๋ถ๋ถ์ ์ถ๊ฐํด์ฃผ์ธ์. ์ด๋ ์นด์นด์คํก ์ฑ์ด ๊น๋ ค ์์์ ์ฌ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๊ธฐ ์ํจ์ ๋๋ค #193. -
Project => Targets ์๋ ์ฑ ์ ํ => General ํญ์ผ๋ก ์ด๋ํด์ Bundle Identifier๊ฐ ๋ณธ์ธ์ ์นด์นด์ค ์ฑ๊ณผ ๋์ผํ์ง ํ์ธํด์ฃผ์ธ์.
-
์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋์ผํ ๋ฒ์ ์ SDK๋ฅผ ์จ์ผ ํ๋ ๊ฒฝ์ฐ
Podfile
์ ์๋์ ๊ฐ์ด ์ถ๊ฐํ์ฌ SDK ๋ฒ์ ์ ๊ฐ์ ๋ก ์ง์ ํ ์ ์์ต๋๋ค.# ์๋ ๊ฒฝ์ฐ์๋ package.json์ sdkVersions.ios.kakao๋ฅผ ๋ฐ๋ฆ ๋๋ค. $KakaoSDKVersion=YOUR_KAKAO_SDK_VERSION
-
ํค ํด์ ๋ฑ๋ก์ ์งํํด์ฃผ์ธ์. ์๋ฐ ์ฝ๋๋ก ๊ตฌํ๋ ๋ฐฉ๋ฒ์ด ์ ์ผ ํ์คํฉ๋๋ค.
AUTHORIZATION_FAILED: invalid android_key_hash or ios_bundle_id or web_site_url
React Native 0.60.x ๋ถํฐ ํ ํ๋ฆฟ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋๋ฒ๊ทธ ํค์คํ ์ด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. (
project/android/app
์ ๋๋ฒ๊ทธ ํค์คํ ์ด๊ฐ ์กด์ฌํฉ๋๋ค.)
๊ธฐ๋ณธ ๋๋ฒ๊ทธ ํค์คํ ์ด์ key hash ๋Xo8WBi6jzSxKDVR4drqm84yr9iU=
๋ฅผ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค.ํ ํ๋ฆฟ์์ ๊ธฐ๋ณธ ์ ๊ณต๋๋๊ฒ ์ด์ธ์ ํค์คํ ์ด์์ key hash ๋ฅผ ์ถ์ถํ๊ธฐ ์ํด์๋ ์๋์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ธ์
๊ธ๋ก๋ฒ debug keystore ์์ key hash ์ถ์ถ
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -storepass android -keypass android | openssl sha1 -binary | openssl base64
ํน์ ๊ฒฝ๋ก์ keystore ์์ key hash ์ถ์ถ
keytool -exportcert -alias {my-app-key-alias} -keystore {your-key-path}/{my-app-key}.keystore -storepass android -keypass android | openssl sha1 -binary | openssl base64
-
Redirect URI ์ค์
-
์นด์นด์ค ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด์๋ ๋ฆฌ๋ค์ด๋ ์ (Redirection)์ ํตํด Request Code๋ฅผ ๋ฐ์์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๊ธฐ ์ํด์๋ ์๋ ์ฝ๋๋ฅผ
AndroidManifest.xml
์ ์ถ๊ฐํด์ฃผ์ธ์. ๊ทธ๋ฆฌ๊ณ์นด์นด์ค ๋ค์ดํฐ๋ธ ์ฑ key๋ฅผ ์ ๋ ฅํด์ฃผ์ธ์
ํ ์คํธ๋ฅผ ๋ณธ์ธ์ ์นด์นด์ค ๋ค์ดํฐ๋ธ ํค๋ก ๋ณ๊ฒฝํด์ฃผ์๋ฉด ๋ฉ๋๋ค. (Android 12(API 31) ์ด์์ ํ๊น์ผ๋ก ํ๋ ์ฑ์ธ ๊ฒฝ์ฐ,exported
์์๋ฅผ ๋ฐ๋์ "true"๋ก ์ ์ธํด์ผ ํฉ๋๋ค.)<activity android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- Redirect URI: "kakao{NATIVE_APP_KEY}://oauthโ --> <data android:host="oauth" android:scheme="kakao{์นด์นด์ค ๋ค์ดํฐ๋ธ ์ฑ key๋ฅผ ์ ๋ ฅํด์ฃผ์ธ์}" /> </intent-filter> </activity>
-
-
app/src/main/res/values/strings.xml
์ ์ด์ด ๋ค์์ ์ถ๊ฐํฉ๋๋ค<resources> <string name="app_name">KakaoLoginExample</string> + <string name="kakao_app_key">your_app_key</string> </resources>
-
๊ณต์๋ฌธ์-ํ ํฐ๊ด๋ฆฌ ์์ ์ฐธ๊ณ ํ ์ ์๋ฏ์ด Android ์นด์นด์ค SDK๋ ์ก์ธ์ค ํ ํฐ์ ์๋ ๊ฐฑ์ ํด์ค๋๋ค.
-
์ปดํ์ผ ์๋ฌ๊ฐ ๋๋ฉด
build.gradle
์์ android sdk compile version ๋ฑ ๋น๋ sdk ๋ฒ์ ์ ๋ง์ถฐ์ฃผ์ธ์. -
(Optional) ์ฑ ๋ฐฐํฌ ์, ์ฝ๋ ์ถ์, ๋๋ ํ, ์ต์ ํ๋ฅผ ํ๋ ๊ฒฝ์ฐ, ์นด์นด์ค SDK๋ฅผ ์ ์ธํด์ผ ํ๊ธฐ ๋๋ฌธ์ ProGuard ๊ท์น ํ์ผ์ ๋ค์ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ฃผ์ธ์.
-keep class com.kakao.sdk.**.model.* { <fields>; }
-keep class * extends com.google.gson.TypeAdapter
# https://github.com/square/okhttp/pull/6792
-dontwarn org.bouncycastle.jsse.**
-dontwarn org.conscrypt.*
-dontwarn org.openjsse.**
- Gradle ๋ฐ ์นด์นด์ค SDK์ ๋ฒ์ ์ ๋ณ๊ฒฝํด์ผ ํ๋ ๊ฒฝ์ฐ, android/gradle.properties ์ ์๋ ํญ๋ชฉ๋ค์ ํ์ธํ๊ณ , Android gradle์ root project์ ext์
RNKakaoLogins_
๋ฅผ ์ ์ธํ ๋ฒ์ ์ ๋ช ์ํด์ฃผ์ธ์.
- Android์ Kakao SDK Maven Repository๋ฅผ ์ ์ธํ๊ธฐ ์ํด ํ์ํ ์์กด์ฑ์ ์ถ๊ฐํฉ๋๋ค.
npx expo install expo-build-properties
- app.json ํ์ผ์ ์๋์ ๊ฐ์ด ์์ ํฉ๋๋ค.
{
"expo": {
...
"plugins": [
...,
[
"@react-native-seoul/kakao-login",
{
"kakaoAppKey": "{{kakao api key}}",
"overrideKakaoSDKVersion": "2.11.2", // Optional,
"kotlinVersion": "1.9.0" // #392
}
],
[
"expo-build-properties",
{
"android": {
"extraMavenRepos": ["https://devrepo.kakao.com/nexus/content/groups/public/"]
}
}
]
],
...
}
}
- (Optional) Android์์ ๋๋ ํ๋ฅผ ์ฌ์ฉํ์ค ๊ฒฝ์ฐ, Expo BuildProperties ๋ฅผ ์ด์ฉํด Proguard Rule์ ๊ณต์ ๋ฌธ์์ ๊ฐ์ด ์ค์ ํด์ค๋๋ค.
Func | Param | Return | Description |
---|---|---|---|
login | Promise{KakaoOAuthToken} | ๋ก๊ทธ์ธ (์นด์นด์คํก์ ์ ๊ทผํ ์ ์๋ค๋ฉด loginWithKakaoAccount ํธ์ถ) | |
loginWithKakaoAccount | Promise{KakaoOAuthToken} | ์นด์นด์ค๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ (๊ธฐ๋ณธ ์น ๋ธ๋ผ์ฐ์ (CustomTabs)์ ์๋ ์นด์นด์ค๊ณ์ cookie ๋ก ์ฌ์ฉ์๋ฅผ ์ธ์ฆํ๊ณ OAuthToken ๋ฐ๊ธ) | |
getProfile | Promise{KakaoProfile} | ํ๋กํ ๋ถ๋ฌ์ค๊ธฐ | |
logout | Promise{string} | ๋ก๊ทธ์์ | |
unlink | Promise{string} | ์ฐ๊ฒฐ๋๊ธฐ | |
getAccessToken | Promise{KakaoAccessTokenInfo} | ์ก์ธ์ค ํ ํฐ ์กฐํ |
iOS | Android | type | Description | |
---|---|---|---|---|
accessToken |
โ | โ | string |
ํ ํฐ |
refreshToken? |
โ | โ | string |
๋ฆฌํ๋ ์ฌ ํ ํฐ |
idToken? |
โ | โ | string |
OpenID Connect ํ์ฅ ๊ธฐ๋ฅ์ ํตํด ๋ฐ๊ธ๋๋ ID ํ ํฐ |
accessTokenExpiresAt? |
โ | โ | Date |
ํ ํฐ ๋ง๋ฃ ์๊ฐ |
refreshTokenExpiresAt? |
โ | โ | Date |
๋ฆฌํ๋ ์ฌ ํ ํฐ ๋ง๋ฃ ์๊ฐ, ๊ตฌ๋ฒ์ SDK๋ก ์ด๋ฏธ ๋ก๊ทธ์ธ์ด ๋์ด์์๋ค๋ฉด null์ด ๋ฐํ๋ ์ ์์ต๋๋ค. |
scopes |
โ | โ | string[] |
์ฌ์ฉ์๋ก ๋ถํฐ ๋ฐ์ ๊ถํ |
iOS | Android | type | Description | |
---|---|---|---|---|
userId |
โ | โ | string |
์ฌ์ฉ์ Id |
needsAgreement |
โ | โ | boolean |
๋ฐฐ์ก์ง ์ ๊ณต์ ๋ํ ์ฌ์ฉ์์ ๋์ ํ์ ์ฌ๋ถ |
shippingAddresses |
โ | โ | Array |
์ฌ์ฉ์๊ฐ ์์ ํ ๋ฐฐ์ก์ง ๋ชฉ๋ก |
iOS | Android | type | Description | |
---|---|---|---|---|
id |
โ | โ | string |
๋ฐฐ์ก์ง ์์ด๋ |
name |
โ | โ | string |
๋ฐฐ์ก์ง๋ช |
isDefault |
โ | โ | boolean |
๊ธฐ๋ณธ ๋ฐฐ์ก์ง ์ฌ๋ถ |
updatedAt |
โ | โ | Date |
๋ง์ง๋ง ๋ฐฐ์ก์ง์ ๋ณด ์์ ์๊ฐ |
type |
โ | โ | string |
๋ฐฐ์ก์ง ํ์ (Old, New) |
baseAddress |
โ | โ | string |
์ฃผ์ ๊ฒ์์ ํตํด ์๋์ผ๋ก ์ ๋ ฅ๋๋ ๊ธฐ๋ณธ ์ฃผ์ |
detailAddress |
โ | โ | string |
๊ธฐ๋ณธ ์ฃผ์์ ์ถ๊ฐํ๋ ์์ธ ์ฃผ์ |
receiverName |
โ | โ | string |
์๋ น์ธ ์ด๋ฆ |
receiverPhoneNumber1 |
โ | โ | string |
์๋ น์ธ ์ฐ๋ฝ์ฒ |
receiverPhoneNumber2 |
โ | โ | string |
์๋ น์ธ ์ถ๊ฐ ์ฐ๋ฝ์ฒ |
zoneNumber |
โ | โ | string |
๋๋ก๋ช ์ฃผ์ ์ฐํธ๋ฒํธ. ๋ฐฐ์ก์ง ํ์ ์ด NEW(๋๋ก๋ช ์ฃผ์)์ธ ๊ฒฝ์ฐ ๋ฐ๋์ ์กด์ฌํจ |
zipCode |
โ | โ | string |
์ง๋ฒ ์ฃผ์ ์ฐํธ๋ฒํธ. ๋ฐฐ์ก์ง ํ์ ์ด OLD(์ง๋ฒ ์ฃผ์)์ฌ๋ ๊ฐ์ด ์์ ์ ์์ |
์นด์นด์ค์ฑํฌ๋ฅผ ๋์ ํ ์๋น์ค๋ง ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ๋๋ค.
iOS | Android | type | Description | |
---|---|---|---|---|
userId |
โ | โ | number? |
ํ์ ๋ฒํธ |
serviceTerms |
โ | โ | KakaoServiceTerms[]? |
์กฐํํ ์๋น์ค ์ฝ๊ด ๋ชฉ๋ก |
iOS | Android | type | Description | |
---|---|---|---|---|
tag |
โ | โ | string |
3rd์์ ๋์ํ ์ฝ๊ด์ ํญ๋ชฉ๋ค์ ์ ์ํ ๊ฐ |
agreed |
โ | โ | boolean |
๋์ ์ฌ๋ถ |
agreedAt |
โ | โ | string? |
์ต๊ทผ ๋์ ์๊ฐ |
required |
โ | โ | boolean |
ํ์ ๋์ ์ฌ๋ถ |
revocable |
โ | โ | boolean |
์ฒ ํ ๊ฐ๋ฅ ์ฌ๋ถ |
1.RestApiKey๋ redirectUrl์ ํฌํจํ ์๋ ๋งํฌ๋ก href ๋งํฌ๋ฅผ ์ด์ด์ code๋ฅผ ๊ฐ์ ธ์ต๋๋ค
const kakaoUrl = https://kauth.kakao.com/oauth/authorize?client_id=${restApiKey}&redirect_uri=${redirectUrl}&response_type=code
;
redirectUrl์ด http://localhost:3000 ์ผ๋ ์๋์๊ฐ์ด redirectUrl์ codeํ๋ผ๋ฏธํฐ๊ฐ ๋ถ์ url์ด ๋ค์ด์์ง๋๋ค
http://localhost:3000/?code=Ss32OM1_yUybn5dtEQ-XT8EZfV24BKC_GIeIvFPz7_wHorYXtij9JFQcMuGtGdzxQc3Vlwopb1UAAAGCizvuCw code= ๋ค์ชฝ๋ถ๋ถ์ splitํด์ ํ ํฐ ๋ฐ๊ธ์ ํ์ํ code๋ฅผ ์ป์ ์ ์์ต๋๋ค react-native-web์์๋ app๊ณผ ๋ค๋ฅด๊ฒ restApikey, redirecturl์ code์ ๊ฐ์ด ์ง์ ๋ฃ์ด์ค์ผ ํฉ๋๋ค
Func | Param | Return | Description |
---|---|---|---|
login | restApiKeyWeb, redirectUrlWeb, codeWeb | Promise{KakaoOAuthWebToken} | ๋ก๊ทธ์ธ |
loginWithKakaoAccount | ์น ์ง์ x | ||
getProfile | tokenWeb | Promise{KakaoProfile} | ํ๋กํ ๋ถ๋ฌ์ค๊ธฐ |
shippingAddresses | tokenWeb | Promise{KakaoShippingAddresses} | ๋ฐฐ์ก์ง ์ ๋ณด ๋ถ๋ฌ์ค๊ธฐ |
logout | tokenWeb | Promise{string} | ๋ก๊ทธ์์ |
unlink | tokenWeb | Promise{string} | ์ฐ๊ฒฐ๋๊ธฐ |
getAccessToken | ์น ์ง์ x |
const signInWithKakao = async (): Promise<void> => {
const token: KakaoOAuthToken = await login();
setResult(JSON.stringify(token));
};
const signOutWithKakao = async (): Promise<void> => {
const message = await logout();
setResult(message);
};
const getKakaoProfile = async (): Promise<void> => {
const profile: KakaoProfile = await getProfile();
setResult(JSON.stringify(profile));
};
const getKakaoShippingAddresses = async (): Promise<void> => {
const addresses: KakaoShippingAddresses = await shippingAddresses();
setResult(JSON.stringify(addresses));
};
const getKakaoServiceTerms = async (): Promise<void> => {
const serviceTerms: KakaoUserServiceTerms = await serviceTerms();
setResult(JSON.stringify(serviceTerms))
}
const unlinkKakao = async (): Promise<void> => {
const message = await unlink();
setResult(message);
};
-
clone
๋ฐ์ ๋ ํฌ์์KakaoLoginExample
ํด๋๋ก ์ด๋ํฉ๋๋คcd KakaoLoginExample
-
ํ์ํ ๋ชจ๋์ ์ค์น ํฉ๋๋ค(
preinstall
์ด ์คํ๋ฉ๋๋ค)yarn
-
ํ๋ก์ ํธ ์คํ
KAKAO_APP_KEY
๋ฑ ํ์ํ SDK ์ฐ๋ ์ค์ ์ ๊ธฐ๋ณธ์ผ๋ก ๋์ด ์์ต๋๋ค.- ๋ณธ์ธ ์ฑ์ ํค๋ก ๋ณ๊ฒฝํ๊ณ ํ
์คํธ ํ์
๋ ๋ฌด๋ฐฉํฉ๋๋ค. ๋จ
PR
์ ๋ ๋ฆฌ์ค ๋๋ ์ญ์ ํ๊ณ ๋ ๋ ค์ฃผ์ธ์.
- ๋ณธ์ธ ์ฑ์ ํค๋ก ๋ณ๊ฒฝํ๊ณ ํ
์คํธ ํ์
๋ ๋ฌด๋ฐฉํฉ๋๋ค. ๋จ
yarn start
yarn ios
oryarn android
๋ก ์ฑ ์คํiOS
์ฑ์ด ์คํ๋์ง ์์ ๋๋XCode
๋ฅผ ์ด๊ณ ํ ์คํธ ํด์ฃผ์ธ์. ์ด๋ RN0.64.0
์์ ๋ฐ์๋๊ณ ์๋ ๋ฌธ์ ์ ๋๋ค.
- ios์ ๊ฒฝ์ฐ
ios
ํด๋์์pod install
์ ๋จผ์ ์คํํด ์ฃผ์ธ์. ํ๋ก์ ํธ ํด๋์์npx pod-install
๋ก ์ด์ฉํ์ ๋ ๋ฌด๋ฐฉํฉ๋๋ค.