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];
});
}