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 이상
 
 - 기타 개발 환경 설정
 
프로젝트 생성
프로젝트는 다음의 순서로 생성한다.

- File
 - New
 - Project 메뉴 선택
 

- iOS
 - Application
 - 템플릿 선택
 

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

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

- Create groups, Add to targets 체크
 - Finish 버튼 선택
 

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

- Create groups, Add to targets 체크
 - Finish 버튼 선택
 

- Project 선택
 - Support Files Group 폴더 선택
 - 마우스 우측 버튼
 - New File 메뉴 선택
 

- PCH File 선택
 - Next 버튼 선택
 

- PrefixHeader 입력
 - Create 버튼 선택
 

- ViewController.h, ViewController.m, Main.storyboard 선택
 - Delete 키 선택
 - Move to Trash 버튼 선택
 
제공 라이브러리 목록
HONE Smart Platform은 고객사의 편의를 위해 일부 기능들을 선 개발하여 제공 하고 있으며 그 항목은 아래와 같다.
| Library Name | Remark | Version | M/O | 
|---|---|---|---|
| HoneSmartSDK | HSP 기본 라이브러리 | ▲2.6.3 | M | 
| CoreInterfaceSDK | HSP와 라이브러리간 연동용 인터페이스 라이브러리 | ▲2.6.3 | M | 
| HoneSmartPluginSDK | HSP Plug-in 인터페이스 라이브러리 | ▲2.6.3 | M | 
| HoneSmartUtilSDK | HSP 공용 유틸 라이브러리 | ▲3.0.0 | M | 
| HoneSmartAppLinkerSDK | 앱 링크 라이브러리 | ▲3.0.0 | O | 
| HoneSmartBacodeSDK | Barcode 라이브러리 | ▲2.6.4 | O | 
| HoneSmartClipboardSDK | 클립보드 라이브러리 | ▲3.0.0 | O | 
| HoneSmartFingerSDK | 지문인식 라이브러리 | ▲3.0.0 | O | 
| HoneSmartFlashlightSDK | 플래시 라이브러리 | ▲3.0.0 | O | 
| HoneSmartGallerySDK | 갤러리 라이브러리 | ▲3.0.0 | O | 
| HoneSmartLockScreenSDK | 잠금화면 라이브러리 | ▲3.1.1 | O | 
| HoneSmartLogSDK | 로그 라이브러리 | ▲3.0.0 | O | 
| HoneSmartMotionSDK | 모션 라이브러리 | ▲3.0.0 | O | 
| HoneSmartNoticeSDK | 공지사항 라이브러리 | ▲2.6.4 | O | 
| HoneSmartScreenSDK | 화면 제어 라이브러리 | ▲3.0.0 | O | 
| HoneSmartSecureSDK | 암호화 DB 라이브러리 | ▲3.1.1 | O | 
| HoneSmartVibratorSDK | 단말 진동 라이브러리 | ▲3.0.0 | O | 
| HoneSmartMonitoringSDK | 앱 크래시 모니터링 라이브러리 | ▲3.0.0 | O | 
| HoneSmartOpenAPISDK | Open API 지원 라이브러리 | ▲3.7.13 | O | 
configuration 파일 생성
HONE Smart Platform 은 프로젝트 내에 환경 정보를 가지는 json 파일을 두고 초기화 시 이를 읽어 화면을 구성 한다.
프로젝트 내에 아래의 파일들을 생성해 두어야 한다. 샘플 프로젝트에 안에 있는 json 파일을 참고 하여 작성한다. 
- preConfiguration.json
 - configuration.json
 - actionflow.json
 - plugin.json
 - window.json
 
각각의 config 와 관련된 json 파일의 세부 속성은 3. Configuration Data 항목을 참조 하여 생성 하면 된다.
General Settings
Dynamic Type으로 빌드 된 프레임워크 이기 때문에 프로젝트의 General 탭 속성에 Embedded Binaries를 설정 해야 한다.

- Project 선택
 - General 선택
 - Embedded Binaries에 + 버튼 (Add items) 선택
 - CoreInterfaceSDK.framework, HoneSmartPluginSDK.framework, HoneSmartUtilSDK.framework 선택
 - 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

- Project 선택
 - General 선택
 - Deployment Info
 - Main Interface 값 삭제
 
Capabilities Settings
앱 간의 DeviceID를 동일하게 사용하기 위해서 Capabilities의 Keychain Sharing 값을 설정해야 한다.

- Project 선택
 - Capabilities 선택
 - Keychain Sharing 활성화
 - Keychain Groups 값 추가
 
다음의 값을 입력한다.
입력
Build Settings
프로젝트의 Build Settings 탭 속성 설정.

- Project 선택
 - Build Setting 선택
 - Framework Search Pahs 항목 선택
 
다음의 경로를 입력한다.
$(SRCROOT)/../ThirdLibs/CoreInterfaceSDK
$(SRCROOT)/../ThirdLibs/HoneSmartPluginSDK
$(SRCROOT)/../ThirdLibs/HoneSmartSDK
입력

- Project 선택
 - Build Setting 선택
 - Other Linker Flags 항목 선택
 
다음의 링크 정보를 입력한다.

- Project 선택
 - Build Setting 선택
 - Prefix Header 항목 선택
 
다음의 경로를 입력한다.

- Project 선택
 - Build Setting 선택
 - Enable Bitcode 항목 선택
 - No로 변경
 
Info 설정
프로젝트의 Info 탭 속성 설정.

- Project 선택
 - Info 선택
 
다음의 속성을 설정한다. (https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html)
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 탭 속성 설정.

- Project 선택
 - Build Phases 선택
 
 버튼 선택- iOS 내부 프레임워크 추가
 
다음의 프레임워크를 추가한다.
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 탭 속성 설정.
- Project 선택
 - Build Phases 선택
 
 버튼 선택- New Run Script Phase 선택
 
다음의 스크립트를 추가한다.
# 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 초기화 및 실행 코드 작성.

- Project 선택
 - Supporting Files
 - PrefixHeader.pch 파일 선택
 - 헤더 작성
 
다음의 헤더를 작성한다.
#import <UIKit/UIKit.h>
#import <HoneSmartSDK/HoneSmartSDK.h>

- Project 선택
 - AppDelegate.m 파일 선택
 
delegate 함수에 아래와 같이 작성한다.
{
[HMPWindowManager sharedWindowManager];
[[HMPAppDelegateManager sharedAppDelegateManager] didFinishLaunchingWithCompletion:^{
} failure:^(NSError *error) {
}];
dispatch_async(dispatch_get_main_queue(), ^{
// Splash 화면을 사용하지 않을 경우 호출 필요.
[[HMPAppDelegateManager sharedAppDelegateManager] completedSplash];
});
}
