728x90
반응형

 

ReactNative 환경에서 타사 라이브러리를 붙이려면 NativeModule로 작성해야 합니다.

 

타사에서 jni .so 라이브러리를 제공해서 load하는데 계속 아래와 같은 오류가 발생했습니다.

A/libc: Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 28002 (mqt_native_modu), pid 27506 (nativexxx)

 

 

 

이유를 알아본다면 Native Module이 javascript thread에서 실행되는곳이 문제가 되고 있는건데요.

 

ReactNative 0.55 Version부터 mgt_접두사가 붙인 MessageQueueThread를 사용하는데 0.55 이하버전에서 .so파일을 불러오는것은 문제가 되지 않지만 이상의 버전이라면 hermes를 사용하여야 합니다.

 

공식 홈페이지를 참고하여 hermes를 활성화 하면 정상적으로 so파일 load가 됩니다.

https://reactnative.dev/docs/hermes

 

Using Hermes · React Native

Hermes is an open-source JavaScript engine optimized for React Native. For many apps, enabling Hermes will result in improved start-up time, decreased memory usage, and smaller app size. At this time Hermes is an opt-in React Native feature, and this guide

reactnative.dev

 

 

 

React Native하면서 이런 이슈들이 많네요.

 

Flutter보다 이런 설정문제가 많다보니 유저들이 많이 떠나고 있는것 같습니다..

 

 

 

- 참고 -

https://stackoverflow.com/questions/49216063/what-is-mqt-native-modules-and-what-to-do-about-its-crashes

 

What is mqt_native_modules and what to do about its crashes

I'm working with React Native (noob) and I'm getting some crashes like the following on Android: libc: Fatal signal 11 (SIGSEGV), code 1 (mqt_native_modu) What is this module mqt_native_modu? Is ...

stackoverflow.com

https://stackoverflow.com/questions/65418985/react-native-crashedthread-sigsegv-libjsc-so

 

React Native Crashed:Thread : SIGSEGV libjsc.so

We are getting following crash on various random places in android devices. Although we have changed ndk abifilters to "armeabi-v7a", "arm64-v8a" Crashed: Thread : SIGSEGV

stackoverflow.com

 

728x90
반응형
728x90
반응형

 

이전 글에서는 Code Push 다중 배포 중 Android 설정에 대해서 알아보았습니다.

https://gigas-blog.tistory.com/276?category=1037450 

 

[ReactNative] Code Push 다중 배포 #1 Android

이전 글에 CodePush 설정을하여 실시간 배포를 진행해봤습니다. https://gigas-blog.tistory.com/270?category=1037450 [ReactNative] Code Push #1 appcenter cli ReactNative의 장점은 CodePush 로 앱을 심사없..

gigas-blog.tistory.com

 

 

 

이번 글에서는 iOS 설정에 대해서 알아보겠습니다.

 

* React Native 0.60 이상을 기준으로 작성하였습니다. *

 

 

 

# iOS 설정

xcode 프로젝트를 열고 프로젝트 탐색기에서 Project를 선택합니다.

 

'Info' 탭에서 'Configurations' 항목의 '+'버튼을 클릭합니다.

 

'Duplicate "Release" Configuration' 을 선택하여 Staging(원하는)이름으로 변경해줍니다.

 

 

 

 

Staging 을 추가하였으니 Build Settings 탭으로 이동합니다.

 

'+' 버튼을 클릭하고 Add User-Defined Setting 을 선택합니다.

 

 

 

MULTI_DEPLOYMENT_CONFIG 항목을 생성하고 Release에는 '$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)', Staging에는 '$(BUILD_DIR)/Release$(EFFECTIVE_PLATFORM_NAME)' 값을 넣어줍니다.

 

 

 

다시 '+' 버튼을 클릭하고 Add User-Defined Setting 을 선택합니다.

 

이번에는 CODEPUSH_KEY 항목을 추가하고 Release에는 Production DeploymentKey를, Staging에는 Staging DeploymentKey 값을 넣어줍니다.

 

 

 

마지막으로 info.plist파일을 열고 기존에 작성했던 CodePushDeploymentKey 항목의 값을 '$(CODEPUSH_KEY)' 로 변경하여 줍니다.

 

기존에 CodePush 설정이 되어있지 않았다면 해당 항목은 없으니 새로 추가하면 됩니다.

 

 

 

 

이제 Scheme 설정에서 원하는 모드로 빌드를 진행할 수 있습니다.

 

기본 debug 모드에서는 배포키가 없으며, 배포시 release, staging모드로 각 모드에 맞는 배포키로  빌드할 수 있습니다.

 

 

 

Release, Staging 말고도 원하는대로 커스텀이 가능하며, 용도에 맞는 모드로 배포해보세요.

 

728x90
반응형
728x90
반응형

 

이전 글에 CodePush 설정을하여 실시간 배포를 진행해봤습니다.

https://gigas-blog.tistory.com/270?category=1037450 

 

[ReactNative] Code Push #1 appcenter cli

ReactNative의 장점은 CodePush 로 앱을 심사없이 없데이트 할 수 있다는 것 인데요. 지금부터 CodePush 설정을 진행해보려고 합니다. 1. AppCenter 계정만들기 AppCenter 회원가입을 진행합니다. GitHub계정이나

gigas-blog.tistory.com

 

 

 

하지만 테스터에게 제공할 때에도 실시간 배포가 되야하는데요.

 

Production 이나 Staging 하나로 배포 키가 고정되어 있다면 매번 앱을 다시 빌드해야할겁니다.

 

AppCenter에서는 Staging으로 테스터에게 배포하고 문제가 없다면 Production으로 배포하는걸 권장하고 있죠.

 

이번 글에서 위의 상황에 맞게 배포할 수 있도록 다중 배포 키를 등록하도록 하겠습니다.

 

* React Native 0.60 이상을 기준으로 작성하였습니다. *

 

 

 

# Android 설정

app 수준의 build.gradle 파일을 열어줍니다.

 

 

 

android { buildTypes {} } 위치를 찾아 빌드 유형에 대한 항목을 정의합니다.

 

resValue에 각 항목에 맞는 배포 키를 넣어줍니다.

 

Staging은 명명규칙때문에 releaseStaging으로 작성해줍니다.

 

그냥 staging으로 작성한다면 Bundle 생성시 buildTypes에서 보여지지 않습니다.

android {
    ...
    buildTypes {
        debug {
            ...
            // Note: CodePush updates shouldn't be tested in Debug mode as they're overriden by the RN packager. However, because CodePush checks for updates in all modes, we must supply a key.
            resValue "string", "CodePushDeploymentKey", '""'
            ...
        }
        releaseStaging {
            ...
            resValue "string", "CodePushDeploymentKey", '"<INSERT_STAGING_KEY>"'
            // Note: It's a good idea to provide matchingFallbacks for the new buildType you create to prevent build issues
            // Add the following line if not already there
            matchingFallbacks = ['release']
            ...
        }
        release {
            ...
            resValue "string", "CodePushDeploymentKey", '"<INSERT_PRODUCTION_KEY>"'
            ...
        }
    }
    ...
}

 

 

 

# Android 에서 hermes를 사용하고 있다면 staging빌드시 충돌로 앱이 종료됩니다 #

# 아래처럼 releaseStagingImplementation 라인을 추가해줘야 정상적으로 앱이 실행됩니다. #

if (enableHermes) {
    ...
    releaseStagingImplementation files(hermesPath + "hermes-release.aar")
} else {
    implementation jscFlavor
}

 

 

 

 

기존에 작성했던 strings.xml에서 작성했던 'CodePushDeploymentKey' 항목은 제거해줍니다.

 

기존에 CodePush 설정이 되어있지 않았다면 해당 항목은 없으니 패스해도 됩니다.

 

 

 

잘 따라 오셨다면 build.gradle에서 'Sync Now'를 클릭해 줍니다.

 

 

 

정상적으로 Sync가 되었다면 상단 메뉴 'Build'항목에서 'Generate Signed Bundle / APK...'메뉴를 클릭합니다.

 

 

서명을 하고 다음으로 넘어가면 정상적으로 releaseStaging 타입이 생긴것을 확인할 수 있습니다.

 

기본 debug 모드에서는 배포키가 없으며, 배포시 release, staging모드로 각 모드에 맞는 배포키로  빌드할 수 있습니다.

 

 

 

Release, Staging 말고도 원하는대로 커스텀이 가능하며, 용도에 맞는 모드로 배포해보세요.

 

728x90
반응형
728x90
반응형

ReactNative의 장점은 CodePush 로 앱을 심사없이 없데이트 할 수 있다는 것 인데요.

 

지금부터 CodePush 설정을 진행해보려고 합니다.

 

 

1. AppCenter 계정만들기

AppCenter 회원가입을 진행합니다.

 

GitHub계정이나 , Google, Facebook 계정으로도 등록이 가능합니다.

 

https://appcenter.ms/

 

Visual Studio App Center | iOS, Android, Xamarin & React Native

Ship fixes and enhancements as fast as you build them. Whether you prefer private distribution, public open betas, Microsoft Intune, TestFlight, Google Play, or the App Store, App Center makes releasing your app a delight.

appcenter.ms

 

 

2. 설치

CodePush 명령을 사용하려면 appcenter-cli를 설치해야 합니다.

 

아래의 명령어를 통해 설치를 진행합니다.

npm install -g appcenter-cli

 

 

CodePush라는 샘플 프로젝트를 만들어보겠습니다.

npx react-native init CodePush

 

 

생성된 프로젝트로 진입합니다.

cd CodePush/

 

 

CodePush 프로젝트에서 아래의 명령어를 통해 depenency를 추가 합니다.

npm install --save react-native-code-push

 

 

 

 

3. AppCenter 로그인

appcenter-cli를 사용하여 AppCenter와 연동을 합니다.

appcenter login

 

 

아래처럼 별도의 브라우저가 띄워지면서 인증토큰을 보여줍니다.

 

아래의 'Enter your token from the browser:' 란에 token을 붙여넣습니다.

 

 

유효한 token을 입력하였다면 아래와같이성공 메시지가 출력됩니다.

Logged in as bonjin

 

 

4. AppCenter App등록

AppCenter에 App을 등록하겠습니다.

 

android, ios 를 구분하여 등록을 하면 되고 예시는 아래와 같습니다.

appcenter apps create -d <appDisplayName> -o <operatingSystem>  -p <platform>

 

 

각 앱 이름 뒤에 ios, android 를 붙여주어 구분하는게 좋기 때문에 CodePush-iOS라는 이름으로 생성해보겠습니다.

appcenter apps create -d CodePush-Android -o Android -p React-Native
appcenter apps create -d CodePush-iOS -o iOS -p React-Native

 

 

정상적으로 App등록이 되었다면 아래처럼 등록정보를 출력해줍니다.

 

여기서 Owner ID, Name 항목을 활용하여 배포키를 만들어줍니다.

 

 

기존 CodePush 앱은 자동으로 Staging, Production 키를 만들어 주었지만 AppCenter에서는 직접 생성을 해줘야 합니다.

appcenter codepush deployment add -a <ownerName>/<appName> Staging
appcenter codepush deployment add -a <ownerName>/<appName> Production

 

 

아래 명령어를 통해 키를 발급받습니다.

appcenter codepush deployment add -a bonjin/CodePush-iOS Staging
appcenter codepush deployment add -a bonjin/CodePush-iOS Production

 

 

 

등록된 키는 code-push-cli를 통해 확인이 가능합니다.

 

# appcenter 명령어로 확인하는 방법은 찾고 업데이트 하겠습니다 #

code-push deployment ls CodePush-iOS -k

 

 

 

AppCenter에 등록된 앱을 확인합니다.

appcenter apps list

 

728x90
반응형

+ Recent posts