From 086e77257fff319f085c446363282e3c63597fce Mon Sep 17 00:00:00 2001 From: techAdmin Date: Mon, 18 Sep 2023 17:23:58 +0900 Subject: [PATCH] =?UTF-8?q?MD=20=EB=AC=B8=EC=84=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 8196 -> 8196 bytes Nexacro14/.DS_Store | Bin 6148 -> 6148 bytes .../Android/이프로젝트에대해서.txt | 15 - Nexacro14/README.md | 338 ------------------ Nexacro17/.DS_Store | Bin 6148 -> 6148 bytes Nexacro17/README.md | 338 ------------------ NexacroN/.DS_Store | Bin 6148 -> 6148 bytes NexacroN/README.md | 338 ------------------ 8 files changed, 1029 deletions(-) delete mode 100644 Nexacro14/Android/이프로젝트에대해서.txt delete mode 100644 Nexacro14/README.md delete mode 100644 Nexacro17/README.md delete mode 100644 NexacroN/README.md diff --git a/.DS_Store b/.DS_Store index b3605efd281b7dcceae46a35ed55c4b5331a92b6..777f58b8488234cdcd22feef57b2fe60f29f660a 100644 GIT binary patch delta 343 zcmZp1XmQw}CJ<*_#K6G7!l1{H&XCDalAG`1l9ZF51Qg?7U}#`hh&k$rDxZQ^z97Re zI5|JJ0H}w7YtsRS$%;avlV=Jva+n*N=_nYPSWJ!*ahUvHNJ!8mCmo@bow?;XSm`W5 zezpcHkgXuDs7Y=0AAf$Z~y=R delta 355 zcmZp1XmQw}CJ?9kiGhKEg+Y%YogtH*;*?Lx>*ekaJs%w+&ETSREFsD*)nj)I|uMXioPwV{Ejk&c3yrO_lY z0pM{M#Y;RPI~CMG%x#)hUq_c%ylO(tuy Tl;Tusyg7+&3FBsVj=%f>-dYzT delta 112 zcmZoMXffC@k44nNz(7aA(88itN1@u#z|=@b!OYTVvH_d% -1. DroidStudio\nexacro14 폴더로 가서 setup.cmd 커맨드를 실행해서 -2. 안드로이드 스튜디오로 import후 자신의 환경에 맞게 세팅오류 잡기. 이때 오류는 자동으로 잡히는 부분이 있고 수동으로 해야 하는 부분이 있을수 있음. \ No newline at end of file diff --git a/Nexacro14/README.md b/Nexacro14/README.md deleted file mode 100644 index 6d1be83..0000000 --- a/Nexacro14/README.md +++ /dev/null @@ -1,338 +0,0 @@ -

Nexacro 24 iOS

-Nexacro 24 Runtime for iOS 버전 - -## Nexacro N Runtime for iOS 버전 대비 차이점 - -- 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 에서 분리 되어 별도로 배포됩니다. - -## 개선사항 - -- 앱 설치 후에도 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 - - - - ``` -- NXSplashScreenProtocol 을 구현한 클래스를 생성하고 다음과 같은 방법으로 구현을 합니다. - - ```sh - // Lottie 를 이용해서 구현한 예제입니다. - #import - #import - - @interface UserSplashScreen : NSObject - - @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 - - - - - 코르도바의 config.xml은 넥사크로의 plugin_config.xml 파일과 동일한 역할을 합니다. - ``` - 2. Xcode 를 통한 Cordova 플러그인 파일 추가 및 수정. - - 코르도바 제네레이터를 통해 넥사크로 프로젝트 경로에 복사된 플러그인 소스를 앱의 프로젝트에 복사한후 Xcode 에서 빌드되도록 소스를 추가합니다. - - 추가한 플러그인 소스에서 Cordova 관련 import 경로를 아래와 같이 변경한다. - ``` - // 변경 전 - - // 변경 후 - ``` - 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 - ``` diff --git a/Nexacro17/.DS_Store b/Nexacro17/.DS_Store index 13ddcc1bd3252a8b44ec71bf6683a6e2698bc5c6..4fe11af356d8dd3a2cec0894791037208759afc8 100644 GIT binary patch delta 46 zcmZoMXffEZjCHamOPPqVnT~>yiAAlBLbaixsfmt)sinc>%`C>7lh~FpZf58B%MSoK C;0Z Z+`Rm*$qsDtjNO|P*p@SHX5;wB4*Nexacro 24 iOS -Nexacro 24 Runtime for iOS 버전 - -## Nexacro N Runtime for iOS 버전 대비 차이점 - -- 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 에서 분리 되어 별도로 배포됩니다. - -## 개선사항 - -- 앱 설치 후에도 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 - - - - ``` -- NXSplashScreenProtocol 을 구현한 클래스를 생성하고 다음과 같은 방법으로 구현을 합니다. - - ```sh - // Lottie 를 이용해서 구현한 예제입니다. - #import - #import - - @interface UserSplashScreen : NSObject - - @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 - - - - - 코르도바의 config.xml은 넥사크로의 plugin_config.xml 파일과 동일한 역할을 합니다. - ``` - 2. Xcode 를 통한 Cordova 플러그인 파일 추가 및 수정. - - 코르도바 제네레이터를 통해 넥사크로 프로젝트 경로에 복사된 플러그인 소스를 앱의 프로젝트에 복사한후 Xcode 에서 빌드되도록 소스를 추가합니다. - - 추가한 플러그인 소스에서 Cordova 관련 import 경로를 아래와 같이 변경한다. - ``` - // 변경 전 - - // 변경 후 - ``` - 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 - ``` diff --git a/NexacroN/.DS_Store b/NexacroN/.DS_Store index f3f3ea4cd1963c62b97031c3a3c259899b635269..efb08132efd7b26dd60f86a6e64c71ee5ca99bb0 100644 GIT binary patch delta 39 ncmZoMXffC@kA=hB*i1*k$i!mvGL}+CIB)VY7KhErYzqYe-N*|4 delta 39 vcmZoMXffC@kA=h3#6(BI*wA$IGL}+C4l^S&9R(v}%gM`F95yGjEffR*+|vs4 diff --git a/NexacroN/README.md b/NexacroN/README.md deleted file mode 100644 index 6d1be83..0000000 --- a/NexacroN/README.md +++ /dev/null @@ -1,338 +0,0 @@ -

Nexacro 24 iOS

-Nexacro 24 Runtime for iOS 버전 - -## Nexacro N Runtime for iOS 버전 대비 차이점 - -- 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 에서 분리 되어 별도로 배포됩니다. - -## 개선사항 - -- 앱 설치 후에도 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 - - - - ``` -- NXSplashScreenProtocol 을 구현한 클래스를 생성하고 다음과 같은 방법으로 구현을 합니다. - - ```sh - // Lottie 를 이용해서 구현한 예제입니다. - #import - #import - - @interface UserSplashScreen : NSObject - - @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 - - - - - 코르도바의 config.xml은 넥사크로의 plugin_config.xml 파일과 동일한 역할을 합니다. - ``` - 2. Xcode 를 통한 Cordova 플러그인 파일 추가 및 수정. - - 코르도바 제네레이터를 통해 넥사크로 프로젝트 경로에 복사된 플러그인 소스를 앱의 프로젝트에 복사한후 Xcode 에서 빌드되도록 소스를 추가합니다. - - 추가한 플러그인 소스에서 Cordova 관련 import 경로를 아래와 같이 변경한다. - ``` - // 변경 전 - - // 변경 후 - ``` - 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 - ```