UNPKG

@react-native-kakao/core

Version:

React Native Kakao Core SDK

91 lines (90 loc) 4.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.withIos = void 0; const codeMod_1 = require("@expo/config-plugins/build/ios/codeMod"); const config_plugins_1 = require("expo/config-plugins"); const withIos = (config, { nativeAppKey, ios: { handleKakaoOpenUrl, naviApplicationQuerySchemes } }) => { if (!nativeAppKey) { throw new Error("[@react-native-kakao/core] 'nativeAppKey' missing in expo config plugin value"); } config = (0, config_plugins_1.withInfoPlist)(config, (config) => { if (!config.modResults.LSApplicationQueriesSchemes) { config.modResults.LSApplicationQueriesSchemes = []; } if (!config.modResults.CFBundleURLTypes) { config.modResults.CFBundleURLTypes = []; } // core if (config.modResults.CFBundleURLTypes?.findIndex((t) => t.CFBundleURLSchemes.some((s) => s === `kakao${nativeAppKey}`)) === -1) { config.modResults.CFBundleURLTypes = [ ...config.modResults.CFBundleURLTypes, { CFBundleURLSchemes: [`kakao${nativeAppKey}`], CFBundleURLName: 'Kakao', }, ]; } config.modResults.LSApplicationQueriesSchemes = [ ...new Set([ ...config.modResults.LSApplicationQueriesSchemes, 'kakaokompassauth', 'kakaolink', 'kakaoplus', ]), ]; // kakao navi if (naviApplicationQuerySchemes) { config.modResults.LSApplicationQueriesSchemes = [ ...new Set([...config.modResults.LSApplicationQueriesSchemes, 'kakaonavi-sdk']), ]; } return config; }); if (handleKakaoOpenUrl) { config = withKakaoUserSdkAppDelegate(config); } return config; }; exports.withIos = withIos; const withKakaoUserSdkAppDelegate = (config) => { const modifyObjcContents = (contents) => { const importRctLinkingManager = '#import <React/RCTLinkingManager.h>'; const importMod = '#import <RNCKakaoUser/RNCKakaoUserUtil.h>'; if (!contents.includes(importRctLinkingManager)) { contents = `${importRctLinkingManager}\n${contents}`; } if (!contents.includes(importMod)) { contents = contents.replace(importRctLinkingManager, importRctLinkingManager + '\n' + importMod); } if (!contents.includes('RNCKakaoUserUtil handleOpenUrl')) { contents = contents.replace('options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {', `options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options { if([RNCKakaoUserUtil isKakaoTalkLoginUrl:url]) { return [RNCKakaoUserUtil handleOpenUrl:url]; } `); } return contents; }; const modifySwiftContents = (contents) => { const importAnchor = 'import Expo'; const importMod = 'import RNCKakaoUser'; if (!contents.includes(importAnchor)) { contents = `${importAnchor}\n${contents}`; } if (!contents.includes(importMod)) { contents = contents.replace(importAnchor, importAnchor + '\n' + importMod); } if (!contents.includes('RNCKakaoUserUtil.handleOpen(url)')) { contents = (0, codeMod_1.insertContentsInsideSwiftFunctionBlock)(contents, 'application(_:open:options:)', 'if(RNCKakaoUserUtil.isKakaoTalkLoginUrl(url)) { return RNCKakaoUserUtil.handleOpen(url) }', { position: 'head' }); } return contents; }; return (0, config_plugins_1.withAppDelegate)(config, (props) => { const { modResults } = props; if (['objc', 'objcpp'].includes(modResults.language)) { modResults.contents = modifyObjcContents(modResults.contents); } else if (modResults.language === 'swift') { modResults.contents = modifySwiftContents(modResults.contents); } return props; }); };