01. iOS 개발 가이드


준비사항

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

  • 개발도구
    • Xcode 
    • iOS SDK
  • Operating System
    • Mac OS X 10.11.5 or later (x86 only)
  • Xcode Version
    • 8.0 이상 
  • iOS SDK
    • 8.1 이상
  • 기타 개발 환경 설정

프로젝트 생성

프로젝트는 다음의 순서로 생성한다.

Picture1.png

  1. File
  2. New
  3. Project 메뉴 선택

     

Picture2.png

  1. iOS
  2. Application
  3. 템플릿 선택

     

Picture3.png

  1. 프로젝트 명 기입
  2. Language 항목 Objective-C 선택
  3. Next 버튼 선택

     

Picture4.png

  1. 제공 된 필수 CoreInterfaceSDK, HoneSmartSDK, HoneSmartUtilSDK, HoneSmartPluginSDK 프레임워크를 드래그 & 드롭으로 프로젝트에 추가
  2. HSP 추가 기능 이용 시 HSP 라이브러리 목록을 참고하여 해당 프레임워크를 드래그 & 드롭으로 프로젝트에 추가

     

Picture5.png

  1. Create groups, Add to targets 체크
  2. Finish 버튼 선택

     

스크린샷 2017-07-25 오전 11.20.51.png

  1. 위와 동일한 방법으로 제공된 Resources 폴더를 드래그 & 드롭으로 프로젝트에 추가

     

Picture7.png

  1. Create groups, Add to targets 체크
  2. Finish 버튼 선택

     

Picture8.png

  1. Project 선택
  2. Support Files Group 폴더 선택
  3. 마우스 우측 버튼
  4. New File 메뉴 선택

     

Picture9.png

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

     

Picture10.png

  1. PrefixHeader 입력
  2. Create 버튼 선택

Picture11.png

  1. ViewController.h, ViewController.m, Main.storyboard 선택
  2. Delete 키 선택
  3. Move to Trash 버튼 선택

     

제공 라이브러리 목록

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

M : Mandatory, O : Optional 

Library NameRemarkVersionM/O
HoneSmartSDKHSP 기본 라이브러리▲2.6.3M
CoreInterfaceSDKHSP와 라이브러리간 연동용 인터페이스 라이브러리▲2.6.3M
HoneSmartPluginSDKHSP Plug-in 인터페이스 라이브러리▲2.6.3M
HoneSmartUtilSDKHSP 공용 유틸 라이브러리▲3.0.0M
HoneSmartAppLinkerSDK앱 링크 라이브러리▲3.0.0O
HoneSmartBacodeSDKBarcode 라이브러리▲2.6.4O
HoneSmartClipboardSDK클립보드 라이브러리▲3.0.0O
HoneSmartFingerSDK지문인식 라이브러리▲3.0.0O
HoneSmartFlashlightSDK플래시 라이브러리▲3.0.0O
HoneSmartGallerySDK갤러리 라이브러리▲3.0.0O
HoneSmartLockScreenSDK잠금화면 라이브러리▲3.1.1O
HoneSmartLogSDK로그 라이브러리▲3.0.0O
HoneSmartMotionSDK모션 라이브러리▲3.0.0O
HoneSmartNoticeSDK공지사항 라이브러리▲2.6.4O
HoneSmartScreenSDK화면 제어 라이브러리▲3.0.0O
HoneSmartSecureSDK암호화 DB 라이브러리▲3.1.1O
HoneSmartVibratorSDK단말 진동 라이브러리▲3.0.0O
HoneSmartMonitoringSDK앱 크래시 모니터링 라이브러리▲3.0.0O
HoneSmartOpenAPISDKOpen API 지원 라이브러리▲3.7.13O
    

configuration 파일 생성

HONE Smart Platform 은 프로젝트 내에 환경 정보를 가지는 json 파일을 두고 초기화 시 이를 읽어 화면을 구성 한다.
프로젝트 내에 아래의 파일들을 생성해 두어야 한다. 샘플 프로젝트에 안에 있는 json 파일을 참고 하여 작성한다. 

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

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

General Settings

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

Picture13.png

  1. Project 선택
  2. General 선택
  3. Embedded Binaries에 + 버튼 (Add items) 선택
  4. CoreInterfaceSDK.framework, HoneSmartPluginSDK.framework, HoneSmartUtilSDK.framework 선택
  5. Add 선택

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

Picture15.png

  1. Project 선택
  2. General 선택
  3. Deployment Info
  4. Main Interface 값 삭제

Capabilities Settings

앱 간의 DeviceID를 동일하게 사용하기 위해서 Capabilities의 Keychain Sharing 값을 설정해야 한다.

Picture15.png

  1. Project 선택
  2. Capabilities 선택
  3. Keychain Sharing 활성화
  4. Keychain Groups 값 추가

다음의 값을 입력한다.

e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
입력

Build Settings

프로젝트의 Build Settings 탭 속성 설정.

Picture16.png

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

다음의 경로를 입력한다.

$(SRCROOT)/../ThirdLibs/HoneSmartUtilSDK
$(SRCROOT)/../ThirdLibs/CoreInterfaceSDK
$(SRCROOT)/../ThirdLibs/HoneSmartPluginSDK
$(SRCROOT)/../ThirdLibs/HoneSmartSDK
입력

Picture19.png

  1. Project 선택
  2. Build Setting 선택
  3. Other Linker Flags 항목 선택

     

다음의 링크 정보를 입력한다.

-ObjC -lsqlite3 -lxml2 -liconv -lz -lstdc++ 입력

Picture20.png

  1. Project 선택
  2. Build Setting 선택
  3. Prefix Header 항목 선택

     

다음의 경로를 입력한다.

[ProjectName]/PrefixHeader.pch 입력

Picture21.png

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

     

Info 설정

프로젝트의 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 추가
App Transport Security Settings 추가
-    App Transport Security Settings  확장 후 Allow Arbitrary Loads YES 설정
iOS 내부 프레임워크 추가

프로젝트의 Build Phases 탭 속성 설정.

Picture23.png

  1. Project 선택
  2. Build Phases 선택
  3. add 버튼 선택
  4. iOS 내부 프레임워크 추가

     

다음의 프레임워크를 추가한다.

libz.1.2.8.tbd
libiconv.2.4.0.tbd
libxml2.2.tbd
libsqlite3.0.tbd
CFNetwork.framework
CoreFoundation.framework
SystemConfiguration.framework
AddressBook.framework
CoreLocation.framework
CoreData.framework
CoreAudio.framework
QuartzCore.framework
Security.framework
AudioToolBox.framework
AdSupport.framework
MobileCoreServices.framework
ImageIO.framework
AssetsLibrary.framework
CoreTelephony.framework
CoreGraphics.framework
빌드 스크립트 추가

32bit/64bit 합쳐진 framework의 경우 App Store에 배포 할때 에러가 발생하게 된다.
따라서 아래 스크립트를 이용해서 빌드시에 필요한 framework만 빌드하도록 해야 한다.

프로젝트의 Build Phases 탭 속성 설정.

  1. Project 선택
  2. Build Phases 선택
  3. add 버튼 선택
  4. New Run Script Phase 선택

     

다음의 스크립트를 추가한다.

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"

# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
    FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
    FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
    echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"

    EXTRACTED_ARCHS=()

    for ARCH in $ARCHS
    do
        echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
        lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
        EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
    done

    echo "Merging extracted architectures: ${ARCHS}"
    lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
    rm "${EXTRACTED_ARCHS[@]}"

    echo "Replacing original executable with thinned version"
    rm "$FRAMEWORK_EXECUTABLE_PATH"
    mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"

done
실행 코드 작성

HONE Smart Platform 초기화 및 실행 코드 작성.

Picture24.png

  1. Project 선택
  2. Supporting Files
  3. PrefixHeader.pch 파일 선택
  4. 헤더 작성

     

다음의 헤더를 작성한다.

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

Picture25.png

  1. Project 선택
  2. AppDelegate.m 파일 선택

     

delegate 함수에 아래와 같이 작성한다.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [HMPWindowManager sharedWindowManager];
    [[HMPAppDelegateManager sharedAppDelegateManager] didFinishLaunchingWithCompletion:^{

    } failure:^(NSError *error) {

    }];

    dispatch_async(dispatch_get_main_queue(), ^{
     // Splash 화면을 사용하지 않을 경우 호출 필요.
     [[HMPAppDelegateManager sharedAppDelegateManager] completedSplash];
    });
}