01. iOS 개발 가이드


준비사항

HONE Smart Platform의 iOS Client를 적용하기 위해서는 다음과 같은 개발 도구 및 요구 조건을 만족해야 하며 개발 환경에 맞게 설정되어야 한다.

개발도구

  • Xcode
    • 10.2 이상  
  • iOS SDK
    • 12.2 이상

Operating System

  • Mac OS X 10.11.5 or later (x86 only)

프로젝트 생성

1. Xcode 구동 후 Create New Project 혹은 File → New → Project 를 선택하여 신규 프로젝트 생성 

2. Template →  iOS → App 선택

screen1.png screen4.png

3. 프로젝트명과 소속명 등 정보 입력 후 Next 버튼 클릭
   → 프로젝트 언어 설정(Swift or Objective-C)

Picture1.png


시작화면 지정

HONE Smart Platform에서 제공하는 화면을 설정하기 위해 아래와 같이 수정한다.

1. 기본 시작화면 설정 및 파일 삭제

1-1. SceneDelegate 삭제

Picture14.png

1-2. info.plist에서 Application Scene Manifest  삭제

Picture14.png

2. Appdelegate 수정

AppDelegate 파일을 아래와 같이 수정한다.

2-1. configurationForConnecting, didDiscardSceneSessions 메소드 삭제

SceneDelegate 삭제를 위해 AppDelegate 내 아래 두 기본 메소드를 삭제한다.

// MARK: UISceneSession Lifecycle
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
   return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}

func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
}
#pragma mark - UISceneSession lifecycle
- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options {
   return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role];
}

- (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet<UISceneSession *> *)sceneSessions {
}

2-2. UIWindow property 추가

var window: UIWindow?
@property (strong, nonatomic) UIWindow * window;

2-3. didFinishLaunchingWithOptions 에 아래 코드 추가

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    HMPWindowManager.shared()
    HMPAppDelegateManager.shared().didFinishLaunching(completion: {
           
    }, failure: { error in
           
    })
       
    DispatchQueue.main.async(execute: {
        HMPAppDelegateManager.shared().completedSplash()
    })
   return true
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [HMPWindowManager sharedWindowManager];
    [[HMPAppDelegateManager sharedAppDelegateManager] didFinishLaunchingWithCompletion:^{
         // actionflow 종료 시점
   } failure:^(NSError *error) {
         // actionflow 오류 콜백
   }];
    [[HMPAppDelegateManager sharedAppDelegateManager] completedSplash];
}

HSP Frameworks setting

필수 SDK Settings

Dynamic Type으로 빌드 된 프레임워크 이기 때문에 프로젝트의 Build Phase 탭 속성에 Embed Frameworks를 설정 해야 한다.

Picture13.png

  1. Project 선택
  2. Build Phase 선택
  3. Embed Frameworks에 + 버튼 (Add items) 선택
  4. CoreInterfaceSDK.framework, HoneSmartPluginSDK.framework, HoneSmartUtilSDK.framework, HoneSmartPermissionSDK.framework, HoneSmartSDK.framework 선택
  5. bundle 추가
  6. Add 선택

또한, Project → Build Setting 에서 경로를 설정해준다.

Picture16.png

  1. Project 선택
  2. Build Setting 선택
  3. Framework Search Paths 항목 선택

다음의 경로를 입력한다.

$(SRCROOT)/../ThirdLibs/HoneSmartUtilSDK
$(SRCROOT)/../ThirdLibs/CoreInterfaceSDK
$(SRCROOT)/../ThirdLibs/HoneSmartPluginSDK
$(SRCROOT)/../ThirdLibs/HoneSmartPermissionSDK
$(SRCROOT)/../ThirdLibs/HoneSmartSDK 

Embed & Sign 안 해 줄 경우 아래와 같은 에러가 나타난다.

dyld: Library not loaded: @rpath/HoneSmartBarcodeSDK.framework/HoneSmartBarcodeSDK
Referenced from: /Users/succorer/Library/Developer/CoreSimulator/Devices/1CD584D9-90CE-4B0D-89A9-C36110AA7C87/data/Containers/Bundle/Application/76BA3631-9810-4929-B3EB-B27E8DE3FFD8/SampleApp.app/SampleApp
Reason: image not found


제공 라이브러리

HONE Smart Platform은 고객사의 편의를 위해 일부 기능들을 선 개발하여 제공 하고 있으며 그 항목은 아래와 같다. 

M : Mandatory, O : Optional 

Library NameRemarkVersionM/O
HoneSmartSDKHSP 기본 라이브러리▲4.2.8M
CoreInterfaceSDKHSP와 라이브러리간 연동용 인터페이스 라이브러리▲4.2.8M
HoneSmartPluginSDKHSP Plug-in 인터페이스 라이브러리▲4.2.8M
HoneSmartPermissionSDKHSP 권한 라이브러리▲4.2.8M
HoneSmartUtilSDKHSP 공용 유틸 라이브러리▲4.2.8M
HoneSmartAppLinkerSDK앱 링크 라이브러리▲4.2.8O
HoneSmartBacodeSDKBarcode 라이브러리▲4.2.8O
HoneSmartCrashReportSDK비정상 종료 및 예외 수집 라이브러리▲4.7.15O
HoneSmartClipboardSDK클립보드 라이브러리▲4.2.8O
HoneSmartFingerSDK지문인식 라이브러리▲4.2.8O
HoneSmartFlashlightSDK플래시 라이브러리▲4.2.8O
HoneSmartGallerySDK갤러리 라이브러리▲4.2.8O
HoneSmartLockScreenSDK잠금화면 라이브러리▲4.2.8O
HoneSmartLogSDK로그 라이브러리▲4.2.8O
HoneSmartMotionSDK모션 라이브러리▲4.2.8O
HoneSmartNoticeSDK공지사항 라이브러리▲4.2.8O
HoneSmartScreenSDK화면 제어 라이브러리▲4.2.8O
HoneSmartSecureSDK암호화 DB 라이브러리▲4.2.8O
HoneSmartVibratorSDK단말 진동 라이브러리▲4.2.8O
HoneSmartMonitoringSDK앱 크래시 모니터링 라이브러리▲4.2.8O
HoneSmartOpenAPISDKOpen API 지원 라이브러리▲4.2.8O
HoneSmartBeaconSDK비콘 라이브러리▲4.2.8O
HoneSmartNfcSDKNFC 라이브러리▲4.2.8O
    

configuration 파일 생성

HONE Smart Platform 은 프로젝트 내에 환경 정보를 가지는 json 파일을 두고 초기화 시 이를 읽어 화면을 구성한다.

따라서, 프로젝트 내 아래의 파일들을 생성해 두어야 한다. 샘플 프로젝트에 안에 있는 json 파일을 참고하여 작성한다. 

  1. preConfiguration.json
  2. configuration.json
  3. actionflow.json
  4. plugin.json
  5. window.json

각각의 config 와 관련된 json 파일의 세부 속성은 2.Configuration Data 항목을 참조하여 생성하면 된다.


Build Setting

prefixheader 파일 생성

1. Project 우클릭 후 New File 메뉴 선택

Picture8.png

2. PCH File 선택 후 Next 버튼 선택

Picture9.png

3. PrefixHeader 입력

Picture10.png

4. Project → Build Setting →  Prefix Header 항목 선택 후 다음의 경로를 입력

[ProjectName]/PrefixHeader.pch 입력

Picture20.png

5. PrefixHeader.pch 파일에 아래 헤더 파일 import 

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <HoneSmartSDK/HoneSmartSDK.h>

Bridging-Header 파일 생성

Swift 프로젝트에서 Objective-C library 사용을 위해 아래와 같이 프로젝트를 설정한다.

1. 브릿지 헤더 파일(AppName-Bridging-Header.h)  추가

header1.png

2. 브릿지 헤더 파일 경로 추가
'Project - Target - Build Settings - Objective-C Bridging Header' 에 파일의 위치/AppName-Bridging-Header.h 추가

header2.png

3. 사용할 Objective-C library를 브릿지 헤더에 import

header4.png

4. 라이브러리 사용하기
→  HMP 라이브러리를 상속받는 클래스 앞에 @objc(클래스명) 어노테이션(Annotation)을 필수로 선언

header5.png


BitCode 설정

Picture21.png

  1. Project 선택
  2. Build Setting 선택
  3. Enable Bitcode 항목 선택
  4. No로 변경

     


Info.plist 설정

프로젝트의 Info 탭 속성 설정

Picture22.png

  1. Project 선택
  2. Info 선택

     

다음의 속성을 설정한다. 

(https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html)

Privacy - Location When In Use Usage Description 추가
Privacy - Location Always Usage Description 추가
Privacy - Contacts Usage Description 추가
Privacy - Photo Library Usage Description 추가
Privacy - Photo Library Additions Usage Description 추가 (iOS11 이상)
Privacy - Camera Usage Description 추가
Privacy - Location Usage Description 추가
Privacy - Face ID Usage Description 추가
Privacy - NFC Scan Usage Description 추가
App Transport Security Settings 추가
-    App Transport Security Settings  확장 후 Allow Arbitrary Loads YES 설정

기타 설정

Localization 설정

다국어 지원을 위해 아래와 같이 프로젝트를 설정한다.

1. Localization 추가
PROJECT → Info →  Localization → “  +  ” 클릭 → Korean (ko) 선택

local1.png

2. Localization을 적용할 파일 선택 후 Finish 클릭

local2.png

3. Info →  Localization 에서 Korean 적용되었음을 확인 

local3.png


Web Inspector 설정

1. Safari 설정

Safari → 설정 → 고급 → ‘웹 개발자를 위한 기능 보기’ 체크

screen2.png screen3.png

2. 단말기 설정(단말기 테스트인 경우)

디바이스 → 설정 → Safari → 고급 → 웹 인스펙터 활성화

screen9.png

3. 프로젝트 빌드 후 Safari 실행 및 디버깅 수행

Safari → 개발자용 → 테스트 기기 → 웹뷰

screen5.png

클릭 후 나온 Safari 웹 인스펙터로 소스 → 웹 디버깅 수행

screen6.png