레포지터리 MD 문서 작성
This commit is contained in:
parent
4ac96e78f0
commit
12709eaf2a
Binary file not shown.
Binary file not shown.
344
README.md
344
README.md
|
@ -1,338 +1,16 @@
|
|||
<h1 align="center">Nexacro 24 iOS</h1>
|
||||
Nexacro 24 Runtime for iOS 버전
|
||||
<h1 align="center">NRE 샘플 프로젝트 [ iOS & Android ] </h1>
|
||||
|
||||
## Nexacro N Runtime for iOS 버전 대비 차이점
|
||||
## Nexacro 전용 NRE 샘플 프로젝트 입니다.
|
||||
|
||||
- start_ios.json 을 파싱 하는 로직을 시작으로 초기 로딩 부분을 [Android WebView](http://172.10.12.65:22080/nre/Droid-WebView) 버전과 비슷한 구조로 리팩토링 하였습니다.
|
||||
- [Cordova WebView](https://github.com/apache/cordova-ios) 엔진 구조를 참고하여 개발하였습니다.
|
||||
- 배포라이브러리를 framework에서 [xcframework](https://showcove.medium.com/library-framework-%EA%B7%B8%EB%A6%AC%EA%B3%A0-xcframework-15387031964b) 로 변경하였습니다.
|
||||
- DeviceAPI가 nexacro.xcframework 에서 분리 되어 별도로 배포됩니다.
|
||||
- 버전표시 및 초기 환경세팅 메뉴얼
|
||||
|
||||
## 개선사항
|
||||
| 넥사크로 | Android | iOS | 환경세팅 방법 |
|
||||
|:---:|:---:|:---:| :---: |
|
||||
| NexacroN_V24| 프로토타입 | 프로토타입 | 미정 |
|
||||
| NexacroN | 21.0.0.1500 | 21.0.0.1500 | [링크](http://docs.tobesoft.com/deployment_guide_nexacro_n_ko) |
|
||||
| Nexacro17 | 17.1.3.1600 | 17.1.3.1600 | [링크](http://docs.tobesoft.com/deployment_guide_nexacro_17_ko) |
|
||||
| Nexacro14 | 14.0.1.4202 | 14.0.1.4202 | [링크](http://docs.tobesoft.com/admin_guide_nexacro_14_ko) |
|
||||
|
||||
- 앱 설치 후에도 Update Type을 server or update, local 변경이 자유롭게 가능하도록 개선하였습니다.
|
||||
|
||||
## 테스트 환경
|
||||
|
||||
`NEXACRO Studio`
|
||||
|
||||
- 큰 변경사항이 없으며 iOS 로 디플로이한 프로젝트를 그대로 사용 합니다.
|
||||
|
||||
`Xcode`
|
||||
|
||||
- Version 14.3
|
||||
- macOS Ventura 13.3.1 (a)
|
||||
- 최신 버전 사용을 권장 합니다.
|
||||
|
||||
## 사양
|
||||
|
||||
- iOS 11 이상
|
||||
- 기존 nexacro의 최소 지원 버전은 9입니다.
|
||||
- 어느 버전부터 지원할지 [iOS 및 iPadOS 사용 현황](https://developer.apple.com/kr/support/app-store/) 참고하여 정해야 할 것으로 판단됩니다.
|
||||
- 너무 예전 버전으로 설정시 warning 이 뜨거나 새로운 Xcode로 프로젝트 생성시 9 같은 버전은 선택 리스트에 뜨지 않고 있습니다.
|
||||
|
||||
## 의존 라이브러리
|
||||
|
||||
- 현재 시점에서는 없습니다.
|
||||
|
||||
## 테스트 방법
|
||||
|
||||
- 기존 iOS 와 유사하지만 약간의 변경사항이 있습니다.
|
||||
- 상속하는 클래스명이 변경되었습니다.
|
||||
|
||||
```sh
|
||||
# 변경 전
|
||||
@interface ViewController : NexacroMainViewController
|
||||
@interface AppDelegate : NexacroAppDelegate
|
||||
|
||||
# 변경 후
|
||||
@interface ViewController : NXViewController
|
||||
@interface AppDelegate : NXAppDelegate
|
||||
```
|
||||
|
||||
- 부트스트랩 주소를 선언하는 오버라이딩 대상 메소드가 변경 되었습니다.
|
||||
|
||||
```sh
|
||||
# 변경 전
|
||||
@implementation AppDelegate
|
||||
- (NexacroMainViewController*)initializeMainViewController
|
||||
{
|
||||
NSString *bootstrapUrl = @"http://172.10.12.59:8080/nexacroN/DroidWebviewSample/_ios_/start_ios.json";
|
||||
|
||||
[[NexacroResourceManager sharedResourceManager] setBootstrapURL:bootstrapUrl isDirect:NO];
|
||||
AppViewController* controller = [[AppViewController alloc] initWithFullScreen:NO];
|
||||
|
||||
return controller;
|
||||
}
|
||||
@end
|
||||
|
||||
# 변경 후
|
||||
@implementation AppDelegate
|
||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
||||
{
|
||||
self.viewController = [[ViewController alloc] init];
|
||||
|
||||
// server 및 update 모드 구동 방법
|
||||
self.viewController.projectUrl = @"http://172.10.12.59:8080/nexacroN/DroidWebviewSample/_ios_update_/";
|
||||
self.viewController.bootstrapUrl = @"http://172.10.12.59:8080/nexacroN/DroidWebviewSample/_ios_update_/start_ios.json";
|
||||
|
||||
// local 모드 구동 방법
|
||||
// self.viewController.bootstrapUrl = @"file:///ios_asset/archive/start_ios.json";
|
||||
|
||||
return [super application:application didFinishLaunchingWithOptions:launchOptions];
|
||||
}
|
||||
@end
|
||||
```
|
||||
|
||||
- 현지화 리소스를 nexacro.framework에 포함시켜 사용자는 Xcode의 PROJECT 설정에서 Localizations 항목에 사용하고자 하는 지역만 추가 하면 됩니다. [(기존 방법)](http://docs.tobesoft.com/deployment_guide_nexacro_n_ko/5399b11819414d63#3650a1c89a4d70f6)
|
||||
- 그리고 메인번들의 리소스를 우선시 하기 때문에 기존 방법대로 하게 되면 메시지문구를 재정의 할 수 있습니다.
|
||||
- Scene관련 소스와 리소스는 사용되지 않으므로 제거가 필요합니다.
|
||||
|
||||
## WKWebViewConfiguration 변경 방법
|
||||
- NXViewController 를 상속받은 클래스에 변수를 선언하여 설정 합니다.
|
||||
|
||||
```sh
|
||||
@interface ViewController ()
|
||||
|
||||
@property (nonatomic, strong) WKWebViewConfiguration *configuration;
|
||||
|
||||
@end
|
||||
|
||||
@implementation ViewController
|
||||
|
||||
- (id)init {
|
||||
...
|
||||
self.configuration = [[WKWebViewConfiguration alloc] init];
|
||||
if (@available(iOS 13.0, *)) {
|
||||
self.configuration.defaultWebpagePreferences.preferredContentMode = WKContentModeMobile;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 사용자 Splash View 변경 방법
|
||||
|
||||
- nexacro_config.xml 에 splash screen classname 을 설정합니다.
|
||||
|
||||
```sh
|
||||
<config>
|
||||
<splash classname="UserSplashScreen" ... />
|
||||
</config>
|
||||
```
|
||||
- NXSplashScreenProtocol 을 구현한 클래스를 생성하고 다음과 같은 방법으로 구현을 합니다.
|
||||
|
||||
```sh
|
||||
// Lottie 를 이용해서 구현한 예제입니다.
|
||||
#import <nexacro/NXSplashScreenProtocol.h>
|
||||
#import <Lottie/Lottie.h>
|
||||
|
||||
@interface UserSplashScreen : NSObject <NXSplashScreenProtocol>
|
||||
|
||||
@property (nonatomic, strong, readonly) UIView *splashView;
|
||||
@property (nonatomic, strong, readonly) NSString *dialogPosition;
|
||||
|
||||
@end
|
||||
|
||||
@implementation UserSplashScreen
|
||||
|
||||
- (nullable instancetype)initWithFrame:(CGRect)frame {
|
||||
return [self initWithFrame:frame dialogPosition:@""];
|
||||
}
|
||||
|
||||
- (nullable instancetype)initWithFrame:(CGRect)frame dialogPosition:(nonnull NSString *)position {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_splashView = [[UIView alloc] initWithFrame:frame];
|
||||
}
|
||||
|
||||
_splashView.backgroundColor = [UIColor whiteColor];
|
||||
|
||||
LOTAnimationView *animation = [LOTAnimationView animationNamed:@"CompanyLogo"]; // json
|
||||
[animation setFrame:frame];
|
||||
[self.splashView addSubview:animation];
|
||||
[animation playWithCompletion:^(BOOL animationFinished) {
|
||||
// Do Something
|
||||
}];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)setMessage:(nonnull NSString *)message {
|
||||
NSLog(@"setMessage: %@", message);
|
||||
}
|
||||
|
||||
- (void)setProgress:(float)progress {
|
||||
NSLog(@"setProgress: %f", progress);
|
||||
}
|
||||
|
||||
@end
|
||||
```
|
||||
|
||||
- SplashScreen 을 좀더 노출해야 하는 경우 아래의 메소드를 오버라이드 하여 호출 시점을 조절 합니다.
|
||||
|
||||
```sh
|
||||
@implementation ViewController
|
||||
...
|
||||
- (void)onWebViewPageDidLoad:(NSNotification *)notification
|
||||
{
|
||||
// 아래 함수를 딜레이를 줘서 호출 한다.
|
||||
[super onWebViewPageDidLoad:notification];
|
||||
}
|
||||
...
|
||||
@end
|
||||
```
|
||||
|
||||
## 플러그인 개발
|
||||
|
||||
- NXPlugin을 상속받은 후 필수 함수를 정의하여 개발합니다.
|
||||
|
||||
```sh
|
||||
@interface Camera : NXPlugin
|
||||
...
|
||||
@end
|
||||
|
||||
@implementation Camera
|
||||
...
|
||||
- (void)pluginInitialize {
|
||||
// JavaScript에서 exec를 호출할때 method 가 constructor 일때 호출됩니다.
|
||||
}
|
||||
|
||||
- (void)pluginRelease {
|
||||
// JavaScript에서 exec를 호출할때 method 가 destroy 일때 호출됩니다.
|
||||
}
|
||||
@end
|
||||
|
||||
```
|
||||
|
||||
- 결과값 리턴은 아래와 같은 방식으로 개발합니다.
|
||||
|
||||
```sh
|
||||
// 변경전
|
||||
NSString *callbackResult = [NSString stringWithFormat:@"runCallback(\"callbackID\",\"eventName\",jsonPrametes);"];
|
||||
[self writeJavascript:callbackResult];
|
||||
|
||||
// 변경후
|
||||
NSDictionary *parameters = @{@"pram1":@(pramvalue1),
|
||||
@"pram2":@(pramvalue2)};
|
||||
NXPluginResult *result = [[NXPluginResult alloc] initWithCallbackId:self.nID
|
||||
eventName:@"_onrecvsuccess"
|
||||
parameters:parameters];
|
||||
|
||||
[self.nxCommandDelegate sendPluginResult:result];
|
||||
```
|
||||
|
||||
## Cordova 플러그인 지원
|
||||
|
||||
- Cordova 플러그인 개발을 위해 nexacro.framework 에 기능 구현 및 헤더를 추가 하였습니다.
|
||||
|
||||
```sh
|
||||
// Cordova 헤더 파일 위치
|
||||
nexacro.framework/Headers/Cordova
|
||||
```
|
||||
|
||||
## Cordova 플러그인 추가 방법
|
||||
- (개발중인) 코르도바 제네레이터를 사용합니다.
|
||||
- 코르도바 플러그인 모듈이 생성됩니다.
|
||||
- 넥사크로 프로젝트 하위 경로로 필요한 플러그인 소스가 복사되어 배치됩니다.
|
||||
- 넥사크로 프로젝트에 배치된 소스가 앱 프로젝트에 복사됩니다.
|
||||
- 코르도바 제네레이터가 하지 못하는 작업은 plugin.xml 정보를 바탕으로 아래와 같이 직접 수정합니다.
|
||||
1. 넥사크로 plugin_config.xml 파일에 코르도바 플러그인을 다음과 같이 등록
|
||||
```sh
|
||||
<!-- plugin.xml 파일 정보를 바탕으로 plugin_config.xml 파일에 등록합니다. -->
|
||||
|
||||
plugin.xml
|
||||
<platform name="ios">
|
||||
<config-file target="config.xml" parent="/*">
|
||||
<feature name="StatusBar">
|
||||
<param name="ios-package" value="CDVStatusBar" />
|
||||
<param name="onload" value="true" />
|
||||
</feature>
|
||||
<preference name="StatusBarOverlaysWebView" value="true" />
|
||||
<preference name="StatusBarStyle" value="lightcontent" />
|
||||
</config-file>
|
||||
</platform>
|
||||
|
||||
==>
|
||||
|
||||
plugin_config.xml
|
||||
<plugin name="StatusBar" class="CDVStatusBar" onload="true"/>
|
||||
<preference name="StatusBarOverlaysWebView" value="true" />
|
||||
<preference name="StatusBarStyle" value="lightcontent" />
|
||||
|
||||
코르도바의 config.xml은 넥사크로의 plugin_config.xml 파일과 동일한 역할을 합니다.
|
||||
```
|
||||
2. Xcode 를 통한 Cordova 플러그인 파일 추가 및 수정.
|
||||
- 코르도바 제네레이터를 통해 넥사크로 프로젝트 경로에 복사된 플러그인 소스를 앱의 프로젝트에 복사한후 Xcode 에서 빌드되도록 소스를 추가합니다.
|
||||
- 추가한 플러그인 소스에서 Cordova 관련 import 경로를 아래와 같이 변경한다.
|
||||
```
|
||||
<Cordova/CDV.h> // 변경 전
|
||||
|
||||
<nexacro/Cordova/CDV.h> // 변경 후
|
||||
```
|
||||
3. 플러그인의 종류에 따라서 이외의 작업이 있을수 있습니다.
|
||||
4. 빌드.
|
||||
|
||||
## CLI (커맨드 라인 인터페이스) 에서 배포용 라이브러리 만드는 방법
|
||||
|
||||
- nexacro.xcframework 생성 명령어 (필수)
|
||||
|
||||
```
|
||||
xcodebuild -workspace nexacro_ios_package.xcworkspace -scheme nexacro_universal -configuration Release
|
||||
```
|
||||
|
||||
- DeviceAPI.xcframework 생성 명령어 (선택)
|
||||
|
||||
- 참고로 nexacro.xcframework 에 의존하므로 먼저 위의 커맨드로 생성 되어 있어야함.
|
||||
|
||||
```
|
||||
xcodebuild -workspace nexacro_ios_package.xcworkspace -scheme NXAcceleration_universal -configuration Release
|
||||
|
||||
xcodebuild -workspace nexacro_ios_package.xcworkspace -scheme NXAudioPlayer_universal -configuration Release
|
||||
|
||||
xcodebuild -workspace nexacro_ios_package.xcworkspace -scheme NXBluetoothLE_universal -configuration Release
|
||||
|
||||
xcodebuild -workspace nexacro_ios_package.xcworkspace -scheme NXCamera_universal -configuration Release
|
||||
|
||||
xcodebuild -workspace nexacro_ios_package.xcworkspace -scheme NXContact_universal -configuration Release
|
||||
|
||||
xcodebuild -workspace nexacro_ios_package.xcworkspace -scheme NXExternalAPI_universal -configuration Release
|
||||
|
||||
xcodebuild -workspace nexacro_ios_package.xcworkspace -scheme NXGeolocation_universal -configuration Release
|
||||
|
||||
xcodebuild -workspace nexacro_ios_package.xcworkspace -scheme NXSms_universal -configuration Release
|
||||
|
||||
xcodebuild -workspace nexacro_ios_package.xcworkspace -scheme NXLiteDB_universal -configuration Release
|
||||
|
||||
xcodebuild -workspace nexacro_ios_package.xcworkspace -scheme NXVibrator_universal -configuration Release
|
||||
|
||||
xcodebuild -workspace nexacro_ios_package.xcworkspace -scheme NXNetwork_universal -configuration Release
|
||||
|
||||
xcodebuild -workspace nexacro_ios_package.xcworkspace -scheme NXPush_universal -configuration Release
|
||||
```
|
||||
|
||||
- 배표용 라이브러리 위치
|
||||
|
||||
```
|
||||
WORK800/Hybrid/iOS/nexacroLib/XCFramework/nexacro.xcframework
|
||||
|
||||
WORK800/Hybrid/iOS/module-DeviceAPI/NXAcceleration/XCFramework/NXAcceleration.xcframework
|
||||
|
||||
WORK800/Hybrid/iOS/module-DeviceAPI/NXAudioPlayer/XCFramework/NXAudioPlayer.xcframework
|
||||
|
||||
WORK800/Hybrid/iOS/module-DeviceAPI/NXBluetoothLE/XCFramework/NXBluetoothLE.xcframework
|
||||
|
||||
WORK800/Hybrid/iOS/module-DeviceAPI/NXCamera/XCFramework/NXCamera.xcframework
|
||||
|
||||
WORK800/Hybrid/iOS/module-DeviceAPI/NXContact/XCFramework/NXContact.xcframework
|
||||
|
||||
WORK800/Hybrid/iOS/module-DeviceAPI/NXGeolocation/XCFramework/NXGeolocation.xcframework
|
||||
|
||||
WORK800/Hybrid/iOS/module-DeviceAPI/NXLiteDB/XCFramework/NXLiteDB.xcframework
|
||||
|
||||
WORK800/Hybrid/iOS/module-DeviceAPI/NXNetwork/XCFramework/NXNetwork.xcframework
|
||||
|
||||
WORK800/Hybrid/iOS/module-DeviceAPI/NXSms/XCFramework/NXSms.xcframework
|
||||
|
||||
WORK800/Hybrid/iOS/module-DeviceAPI/NXVibrator/XCFramework/NXVibrator.xcframework
|
||||
|
||||
WORK800/Hybrid/iOS/module-DeviceAPI/NXPush/XCFramework/NXPush.xcframework
|
||||
```
|
||||
- Nexacro14, Nexacro17, NexacroN, NexacroN_V24 전용 iOS & Android NRE 프로젝트 입니다.
|
||||
- 기술지원 및 모듈 개발용으로 자유롭게 사용하시면 됩니다.
|
||||
|
|
Loading…
Reference in New Issue