Skip to content

Commit 2a9881d

Browse files
authored
#263 feat: apply codepush on project (#264)
1 parent ce22bbc commit 2a9881d

File tree

8 files changed

+235
-3
lines changed

8 files changed

+235
-3
lines changed

App.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import HomeScreen from "./src/pages/Home";
2121
import { Coord } from "react-native-nmap";
2222
import SplashScreen from "react-native-splash-screen";
2323
import { LoginProvider } from "./src/common/Context";
24+
import CodePush from 'react-native-code-push';
2425

2526
export type AppProps = {
2627
Home: any;
@@ -262,4 +263,15 @@ const HomeScreens = (): JSX.Element => {
262263
);
263264
};
264265

265-
export default App;
266+
const codePushOptions = {
267+
checkFrequency: CodePush.CheckFrequency.ON_APP_START,
268+
updateDialog: {
269+
title: '...',
270+
optionalUpdateMessage: '...',
271+
optionalInstallButtonLabel: '업데이트',
272+
optionalIgnoreButtonLabel: '아니요.'
273+
},
274+
installMode: CodePush.InstallMode.IMMEDIATE
275+
}
276+
277+
export default CodePush(codePushOptions)(App);

android/app/build.gradle

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ android {
111111
versionName "1.0"
112112

113113
manifestPlaceholders = [naverMapClientId: naverMapClientId, kakaoNativeAppKey: kakaoNativeAppKey]
114+
resValue 'string', "CODE_PUSH_APK_BUILD_TIME", String.format("\"%d\"", System.currentTimeMillis())
114115
}
115116

116117
splits {
@@ -138,13 +139,20 @@ android {
138139
buildTypes {
139140
debug {
140141
signingConfig signingConfigs.debug
142+
resValue "string", "CodePushDeploymentKey", CODEPUSH_DEPLOYMENT_KEY_DEBUG
141143
}
142144
release {
143145
// Caution! In production, you need to generate your own keystore file.
144146
// see https://reactnative.dev/docs/signed-apk-android.
145147
signingConfig signingConfigs.release
146148
minifyEnabled enableProguardInReleaseBuilds
147149
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
150+
resValue "string", "CodePushDeploymentKey", CODEPUSH_DEPLOYMENT_KEY_PRODUCTION
151+
}
152+
releaseStaging {
153+
initWith release
154+
resValue "string", "CodePushDeploymentKey", CODEPUSH_DEPLOYMENT_KEY_STAGING
155+
matchingFallbacks = ['release']
148156
}
149157
}
150158

@@ -198,3 +206,4 @@ dependencies {
198206
}
199207

200208
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
209+
apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"

android/app/src/main/java/kr/co/sasm/MainApplication.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.facebook.react.defaults.DefaultReactNativeHost;
1010
import com.facebook.soloader.SoLoader;
1111
import java.util.List;
12+
import com.microsoft.codepush.react.CodePush;
1213

1314
public class MainApplication extends Application implements ReactApplication {
1415

@@ -42,6 +43,11 @@ protected boolean isNewArchEnabled() {
4243
protected Boolean isHermesEnabled() {
4344
return BuildConfig.IS_HERMES_ENABLED;
4445
}
46+
47+
@Override
48+
protected String getJSBundleFile() {
49+
return CodePush.getJSBundleFile();
50+
}
4551
};
4652

4753
@Override

android/gradle.properties

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,8 @@ newArchEnabled=false
4242
# Use this property to enable or disable the Hermes JS engine.
4343
# If set to false, you will be using JSC instead.
4444
hermesEnabled=true
45+
46+
# codepush
47+
CODEPUSH_DEPLOYMENT_KEY_DEBUG=
48+
CODEPUSH_DEPLOYMENT_KEY_STAGING=xe9yeRRX4Ckx1bHH0lA4ekpYYPzgs273wP0GN
49+
CODEPUSH_DEPLOYMENT_KEY_PRODUCTION=sl41ObnUSdoEw1cKoODzaGs_wBJbEeTF3CIJn

android/settings.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
rootProject.name = 'sasm'
22
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
3-
include ':app'
3+
include ':app', ':react-native-code-push'
44
includeBuild('../node_modules/react-native-gradle-plugin')
5+
project(':react-native-code-push').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-code-push/android/app')

ios/sasm.xcodeproj/project.pbxproj

Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -733,6 +733,7 @@
733733
CLANG_WARN_SUSPICIOUS_MOVE = YES;
734734
CLANG_WARN_UNREACHABLE_CODE = YES;
735735
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
736+
CODEPUSH_KEY = "";
736737
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
737738
COPY_PHASE_STRIP = NO;
738739
ENABLE_STRICT_OBJC_MSGSEND = YES;
@@ -764,6 +765,7 @@
764765
"\"$(inherited)\"",
765766
);
766767
MTL_ENABLE_DEBUG_INFO = YES;
768+
MULTI_DEPLOYMENT_CONFIG = "";
767769
ONLY_ACTIVE_ARCH = YES;
768770
OTHER_CPLUSPLUSFLAGS = (
769771
"$(OTHER_CFLAGS)",
@@ -805,6 +807,7 @@
805807
CLANG_WARN_SUSPICIOUS_MOVE = YES;
806808
CLANG_WARN_UNREACHABLE_CODE = YES;
807809
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
810+
CODEPUSH_KEY = YjVK1Am5QtFoJOyvCAvrp88OM1U1OfQdOykaw;
808811
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
809812
COPY_PHASE_STRIP = YES;
810813
ENABLE_NS_ASSERTIONS = NO;
@@ -829,6 +832,7 @@
829832
"\"$(inherited)\"",
830833
);
831834
MTL_ENABLE_DEBUG_INFO = NO;
835+
MULTI_DEPLOYMENT_CONFIG = "${BUILD_DIR}/${CONFIGURATION}$(EFFECTIVE_PLATFORM_NAME)";
832836
OTHER_CPLUSPLUSFLAGS = (
833837
"$(OTHER_CFLAGS)",
834838
"-DFOLLY_NO_CONFIG",
@@ -841,6 +845,195 @@
841845
};
842846
name = Release;
843847
};
848+
C74F44EC2ACD197F0083EAE1 /* Staging */ = {
849+
isa = XCBuildConfiguration;
850+
buildSettings = {
851+
ALWAYS_SEARCH_USER_PATHS = NO;
852+
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
853+
CLANG_CXX_LANGUAGE_STANDARD = "c++17";
854+
CLANG_CXX_LIBRARY = "libc++";
855+
CLANG_ENABLE_MODULES = YES;
856+
CLANG_ENABLE_OBJC_ARC = YES;
857+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
858+
CLANG_WARN_BOOL_CONVERSION = YES;
859+
CLANG_WARN_COMMA = YES;
860+
CLANG_WARN_CONSTANT_CONVERSION = YES;
861+
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
862+
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
863+
CLANG_WARN_EMPTY_BODY = YES;
864+
CLANG_WARN_ENUM_CONVERSION = YES;
865+
CLANG_WARN_INFINITE_RECURSION = YES;
866+
CLANG_WARN_INT_CONVERSION = YES;
867+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
868+
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
869+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
870+
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
871+
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
872+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
873+
CLANG_WARN_STRICT_PROTOTYPES = YES;
874+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
875+
CLANG_WARN_UNREACHABLE_CODE = YES;
876+
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
877+
CODEPUSH_KEY = "099dGdMwtmHbd4oyQd4pE7bZ-NItxNkV7cg5_";
878+
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
879+
COPY_PHASE_STRIP = YES;
880+
ENABLE_NS_ASSERTIONS = NO;
881+
ENABLE_STRICT_OBJC_MSGSEND = YES;
882+
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
883+
GCC_C_LANGUAGE_STANDARD = gnu99;
884+
GCC_NO_COMMON_BLOCKS = YES;
885+
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
886+
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
887+
GCC_WARN_UNDECLARED_SELECTOR = YES;
888+
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
889+
GCC_WARN_UNUSED_FUNCTION = YES;
890+
GCC_WARN_UNUSED_VARIABLE = YES;
891+
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
892+
LD_RUNPATH_SEARCH_PATHS = (
893+
/usr/lib/swift,
894+
"$(inherited)",
895+
);
896+
LIBRARY_SEARCH_PATHS = (
897+
"\"$(SDKROOT)/usr/lib/swift\"",
898+
"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
899+
"\"$(inherited)\"",
900+
);
901+
MTL_ENABLE_DEBUG_INFO = NO;
902+
MULTI_DEPLOYMENT_CONFIG = "${BUILD_DIR}/Release$(EFFECTIVE_PLATFORM_NAME)\n";
903+
OTHER_CPLUSPLUSFLAGS = (
904+
"$(OTHER_CFLAGS)",
905+
"-DFOLLY_NO_CONFIG",
906+
"-DFOLLY_MOBILE=1",
907+
"-DFOLLY_USE_LIBCPP=1",
908+
);
909+
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
910+
SDKROOT = iphoneos;
911+
VALIDATE_PRODUCT = YES;
912+
};
913+
name = Staging;
914+
};
915+
C74F44ED2ACD197F0083EAE1 /* Staging */ = {
916+
isa = XCBuildConfiguration;
917+
baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-sasm.release.xcconfig */;
918+
buildSettings = {
919+
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
920+
CLANG_ENABLE_MODULES = YES;
921+
CODE_SIGN_ENTITLEMENTS = sasm/sasm.entitlements;
922+
CURRENT_PROJECT_VERSION = 1;
923+
DEVELOPMENT_TEAM = F3YL4R5RLW;
924+
INFOPLIST_FILE = sasm/Info.plist;
925+
LD_RUNPATH_SEARCH_PATHS = (
926+
"$(inherited)",
927+
"@executable_path/Frameworks",
928+
);
929+
LIBRARY_SEARCH_PATHS = (
930+
"$(SDKROOT)/usr/lib/swift",
931+
"$(inherited)",
932+
"\"${PODS_CONFIGURATION_BUILD_DIR}/Alamofire\"",
933+
"\"${PODS_CONFIGURATION_BUILD_DIR}/AppAuth\"",
934+
"\"${PODS_CONFIGURATION_BUILD_DIR}/CocoaAsyncSocket\"",
935+
"\"${PODS_CONFIGURATION_BUILD_DIR}/DoubleConversion\"",
936+
"\"${PODS_CONFIGURATION_BUILD_DIR}/GTMAppAuth\"",
937+
"\"${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher\"",
938+
"\"${PODS_CONFIGURATION_BUILD_DIR}/GoogleSignIn\"",
939+
"\"${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKAuth\"",
940+
"\"${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKCommon\"",
941+
"\"${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKShare\"",
942+
"\"${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKTemplate\"",
943+
"\"${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKUser\"",
944+
"\"${PODS_CONFIGURATION_BUILD_DIR}/Permission-AppTrackingTransparency\"",
945+
"\"${PODS_CONFIGURATION_BUILD_DIR}/Permission-LocationWhenInUse\"",
946+
"\"${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly\"",
947+
"\"${PODS_CONFIGURATION_BUILD_DIR}/RCTTypeSafety\"",
948+
"\"${PODS_CONFIGURATION_BUILD_DIR}/RNAppleAuthentication\"",
949+
"\"${PODS_CONFIGURATION_BUILD_DIR}/RNCAsyncStorage\"",
950+
"\"${PODS_CONFIGURATION_BUILD_DIR}/RNCMaskedView\"",
951+
"\"${PODS_CONFIGURATION_BUILD_DIR}/RNGestureHandler\"",
952+
"\"${PODS_CONFIGURATION_BUILD_DIR}/RNGoogleSignin\"",
953+
"\"${PODS_CONFIGURATION_BUILD_DIR}/RNKeychain\"",
954+
"\"${PODS_CONFIGURATION_BUILD_DIR}/RNNaverLogin\"",
955+
"\"${PODS_CONFIGURATION_BUILD_DIR}/RNPermissions\"",
956+
"\"${PODS_CONFIGURATION_BUILD_DIR}/RNReanimated\"",
957+
"\"${PODS_CONFIGURATION_BUILD_DIR}/RNSVG\"",
958+
"\"${PODS_CONFIGURATION_BUILD_DIR}/RNScreens\"",
959+
"\"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen\"",
960+
"\"${PODS_CONFIGURATION_BUILD_DIR}/React-Core\"",
961+
"\"${PODS_CONFIGURATION_BUILD_DIR}/React-CoreModules\"",
962+
"\"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTAnimation\"",
963+
"\"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTAppDelegate\"",
964+
"\"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTBlob\"",
965+
"\"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTImage\"",
966+
"\"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTLinking\"",
967+
"\"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTNetwork\"",
968+
"\"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTSettings\"",
969+
"\"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTText\"",
970+
"\"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTVibration\"",
971+
"\"${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact\"",
972+
"\"${PODS_CONFIGURATION_BUILD_DIR}/React-hermes\"",
973+
"\"${PODS_CONFIGURATION_BUILD_DIR}/React-jsi\"",
974+
"\"${PODS_CONFIGURATION_BUILD_DIR}/React-jsiexecutor\"",
975+
"\"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector\"",
976+
"\"${PODS_CONFIGURATION_BUILD_DIR}/React-logger\"",
977+
"\"${PODS_CONFIGURATION_BUILD_DIR}/React-perflogger\"",
978+
"\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon\"",
979+
"\"${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket\"",
980+
"\"${PODS_CONFIGURATION_BUILD_DIR}/Yoga\"",
981+
"\"${PODS_CONFIGURATION_BUILD_DIR}/YogaKit\"",
982+
"\"${PODS_CONFIGURATION_BUILD_DIR}/fmt\"",
983+
"\"${PODS_CONFIGURATION_BUILD_DIR}/glog\"",
984+
"\"${PODS_CONFIGURATION_BUILD_DIR}/kakao-login\"",
985+
"\"${PODS_CONFIGURATION_BUILD_DIR}/libevent\"",
986+
"\"${PODS_CONFIGURATION_BUILD_DIR}/react-native-geolocation-service\"",
987+
"\"${PODS_CONFIGURATION_BUILD_DIR}/react-native-image-picker\"",
988+
"\"${PODS_CONFIGURATION_BUILD_DIR}/react-native-kakao-share-link\"",
989+
"\"${PODS_CONFIGURATION_BUILD_DIR}/react-native-nmap\"",
990+
"\"${PODS_CONFIGURATION_BUILD_DIR}/react-native-pager-view\"",
991+
"\"${PODS_CONFIGURATION_BUILD_DIR}/react-native-safe-area-context\"",
992+
"\"${PODS_CONFIGURATION_BUILD_DIR}/react-native-splash-screen\"",
993+
"\"${PODS_CONFIGURATION_BUILD_DIR}/react-native-webview\"",
994+
/usr/lib/swift,
995+
);
996+
MARKETING_VERSION = 1.0;
997+
OTHER_LDFLAGS = (
998+
"$(inherited)",
999+
"-ObjC",
1000+
"-lc++",
1001+
);
1002+
PRODUCT_BUNDLE_IDENTIFIER = kr.co.sasm;
1003+
PRODUCT_NAME = sasm;
1004+
SWIFT_OBJC_BRIDGING_HEADER = "sasm-Bridging-Header.h";
1005+
SWIFT_VERSION = 5.0;
1006+
VERSIONING_SYSTEM = "apple-generic";
1007+
};
1008+
name = Staging;
1009+
};
1010+
C74F44EE2ACD197F0083EAE1 /* Staging */ = {
1011+
isa = XCBuildConfiguration;
1012+
baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-sasm-sasmTests.release.xcconfig */;
1013+
buildSettings = {
1014+
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
1015+
BUNDLE_LOADER = "$(TEST_HOST)";
1016+
COPY_PHASE_STRIP = NO;
1017+
DEVELOPMENT_TEAM = F3YL4R5RLW;
1018+
INFOPLIST_FILE = sasmTests/Info.plist;
1019+
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
1020+
LD_RUNPATH_SEARCH_PATHS = (
1021+
"$(inherited)",
1022+
"@executable_path/Frameworks",
1023+
"@loader_path/Frameworks",
1024+
);
1025+
OTHER_LDFLAGS = (
1026+
"-ObjC",
1027+
"-lc++",
1028+
"$(inherited)",
1029+
);
1030+
PRODUCT_BUNDLE_IDENTIFIER = kr.co.sasm;
1031+
"PRODUCT_BUNDLE_IDENTIFIER[sdk=iphoneos*]" = "kr.co.sasm--kr.co.sasm";
1032+
PRODUCT_NAME = "$(TARGET_NAME)";
1033+
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/sasm.app/sasm";
1034+
};
1035+
name = Staging;
1036+
};
8441037
/* End XCBuildConfiguration section */
8451038

8461039
/* Begin XCConfigurationList section */
@@ -849,6 +1042,7 @@
8491042
buildConfigurations = (
8501043
00E356F61AD99517003FC87E /* Debug */,
8511044
00E356F71AD99517003FC87E /* Release */,
1045+
C74F44EE2ACD197F0083EAE1 /* Staging */,
8521046
);
8531047
defaultConfigurationIsVisible = 0;
8541048
defaultConfigurationName = Release;
@@ -858,6 +1052,7 @@
8581052
buildConfigurations = (
8591053
13B07F941A680F5B00A75B9A /* Debug */,
8601054
13B07F951A680F5B00A75B9A /* Release */,
1055+
C74F44ED2ACD197F0083EAE1 /* Staging */,
8611056
);
8621057
defaultConfigurationIsVisible = 0;
8631058
defaultConfigurationName = Release;
@@ -867,6 +1062,7 @@
8671062
buildConfigurations = (
8681063
83CBBA201A601CBA00E9B192 /* Debug */,
8691064
83CBBA211A601CBA00E9B192 /* Release */,
1065+
C74F44EC2ACD197F0083EAE1 /* Staging */,
8701066
);
8711067
defaultConfigurationIsVisible = 0;
8721068
defaultConfigurationName = Release;

ios/sasm/AppDelegate.mm

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#import "RNSplashScreen.h"
55
#import <RNKakaoLogins.h>
66
#import <NaverThirdPartyLogin/NaverThirdPartyLoginConnection.h>
7+
#import <CodePush/CodePush.h>
78

89
@implementation AppDelegate
910

@@ -24,7 +25,8 @@ - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
2425
#if DEBUG
2526
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
2627
#else
27-
return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
28+
// return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
29+
return [CodePush bundleURL];
2830
#endif
2931
}
3032

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
"axios": "^1.3.3",
2828
"react": "18.2.0",
2929
"react-native": "0.71.2",
30+
"react-native-code-push": "^8.1.0",
3031
"react-native-dotenv": "^3.4.9",
3132
"react-native-draggable-view": "^0.0.6",
3233
"react-native-dropdown-picker": "git+https://github.com/dgfh0450/react-native-dropdown-picker.git",

0 commit comments

Comments
 (0)