Skip to main content

시스템 요구사항

측위정보 수신 미지원 기기인 경우 SDK 동작을 중지하며 운영중인 앱에 영향을 미치지 않습니다.

SDK 설치

1
Xcode에서 [File] → [Add Package Dependencies…] 를 실행합니다.
2
왼쪽 상단의 검색창에 아래 주소를 입력합니다.
3
Dependency Rule 을 Up to Next Major Version 으로 두고 값을 0.2.2 로 설정합니다.
4
[Add Package] 를 눌러 OneS1ght 라이브러리를 앱 타깃에 추가합니다.

iOS 권한 설정

Info.plist 에 아래 다섯 가지 권한 문구를 하나도 빠짐없이 설정합니다. Xcode 에서 앱 타깃의 [Info] 탭 목록에 추가합니다.
1

문자열 키 4개

행에 마우스를 올리면 나타나는 [+] 를 누르고, Key 에 키 이름을 입력한 뒤 Value 에 문구를 넣습니다. Type 은 String 입니다.
2

Dictionary 키 1개

NSLocationTemporaryUsageDescriptionDictionary 는 두 줄 구조입니다.
  1. [+] → Key 에 키 이름 입력 → Type 을 Dictionary 로 바꿉니다 (Value 는 비워 둡니다).
  2. 행 왼쪽 ▸ 를 펼친 뒤 그 행에서 [+] → Key 에 Positioning, Type String, Value 에 문구를 넣습니다.
3

확인

목록에 다섯 항목이 모두 보이면 완료입니다. 섹션 제목이 Custom macOS Application Target Properties 로 보여도 괜찮습니다.
Value 에 넣을 문구는 아래 <string> 값을 그대로 쓰면 됩니다. Xcode 화면 대신 파일에 직접 쓰는 방법은 부록을 참고하세요.
Info.plist

SDK 초기화

SDK 초기화를 해야 SDK 내부 엔진을 실행할 수 있습니다. Objective-C 브리지는 같은 이름의 메서드에서 결과를 completion 블록으로 돌려줍니다.
브리지의 콜백(onPosition · onZoneEnter · onFloorDetected · onConfigChanged · onStopped 등)은 initialize 가 성공한 뒤에 등록하세요. 그 전에 등록하면 아무 일도 일어나지 않습니다(onDebugLog 는 예외).

프로필

사용자(계정 또는 기기) 한 명의 동선은 프로필 단위로 관리됩니다.
프로필 ID 는 고유하며, 분실하면 다시 찾을 수 없으니 보관에 주의해 주세요.

프로필 생성

새 프로필을 만들면 프로필 ID 를 돌려받습니다. 속성은 레포트 · 지표의 세그먼트로 쓰이며 Key-Value 에 제약이 없습니다.
발급받은 ID 는 앱(또는 고객사 서버)에 보관해 두고, 매 실행마다 측위 전에 identify 로 연결합니다.
프로필 속성에는 이름 · 전화번호 · 회원 ID 같은 민감한 정보를 넣지 마세요.
연령대("20s")처럼 식별되지 않는 값만 담습니다.

프로필 정보 조회

프로필 ID를 통해 저장된 개인화 속성을 조회합니다.

프로필 정보 수정

개인화 프로필 속성을 통째로 교체됩니다. 수정 후 기존 값은 삭제되며 되돌릴 수 없습니다.

프로필 삭제

개인화 프로필 속성을 삭제합니다. 삭제된 속성은 되돌릴 수 없습니다.

건물, 층 선택

층 지정은 선택입니다. 지정하지 않아도 측위 엔진이 로케이터의 BLE 신호로 층을 찾아 좌표를 보냅니다.
다만 구역 이벤트를 받으려면 층을 지정해야 합니다(구역 이벤트 참고).

BLE 수신으로 선택

SDK 의 측위 엔진이 로케이터의 BLE 신호로 층을 찾으면 onFloorDetected 로 층 ID 가 옵니다.
층을 잃으면 nil 이 옵니다.

수동으로 선택

사람이 층을 고르게 하거나 측위 전에 지도를 먼저 그릴 때는 건물과 층을 직접 지정합니다.

측위정보 실시간 수신

floorSession() 으로 측위 세션을 얻고, begin() 으로 시작해 end() 로 종료합니다.
위치는 onPosition 으로 받으며, 좌표(미터)는 엔진이 내는 속도 그대로 옵니다.
서버로 보내는 좌표만 콘솔 설정 주기(기본 초당 4회)로 솎아 냅니다.

구역 이벤트

콘솔 공간 관리에서 그린 구역의 진입 · 이탈 · 체류 이벤트를 받습니다. 판정은 기기 안에서 이루어져 바로 옵니다.
구역에 걸린 시책(쿠폰 · 사이니지 등)은 서버가 매칭해 onTriggers 로 전달됩니다.
구역 목록은 setFloorMap 으로 지정한 층에서 받습니다. 층을 지정하지 않으면 구역이 비어 onZoneEnter · onZoneExit 가 오지 않고 E3009 가 남습니다.

구역정보 업데이트

콘솔에서 구역 정보가 바뀔 때 onConfigChanged 가 호출됩니다. SDK 는 호출 횟수를 줄이지 않습니다.
구역을 다시 받을 때마다 진입 · 이탈 판정이 처음부터 시작되므로, 연달아 오는 신호는 앱에서 1초쯤 모아 한 번만 처리하세요.

도면 표시

로케이터와 관련된 도면과 사용자의 현재 위치를 표시할 수 있습니다.
도면 설정을 하지 않을 경우 배경은 격자로 표시됩니다.

기타 옵션

데이터 전송 제어

좌표는 300건이 쌓일 때, 그리고 begin() 부터 60초마다 자동 전송됩니다(300건 전송으로 60초 주기가 다시 시작되지는 않습니다).
백그라운드 진입과 end() 때도 남은 좌표를 보냅니다. 단 앱이 강제 종료되면 좌표는 폐기됩니다.

세션 재설정

측위를 멈추고 세션을 버립니다. 저장된 키도 지워지므로, 이후 API 는 initialize 를 다시 부를 때까지 notInitialized 오류를 냅니다.
앱을 다시 빌드하지 않고 다른 키로 바꿀 때 씁니다.

측위 종료 처리

측위 엔진이 종료된 경우 onStopped 이벤트가 실행되며 측위 가능 상태로 전환 가능합니다.

지원 기기 확인

deviceAvailability 는 네트워크(인터넷) 연결 없이 바로 확인 가능하며
측위를 지원하지 않는 기기라도 앱의 동작에 영향을 미치지 않습니다.

부록

Info.plist 파일에 직접 쓰기

Xcode 의 [Info] 탭에 보이는 목록은 실제로는 Info.plist 라는 파일의 내용입니다. 최근 Xcode 로 만든 프로젝트는 이 파일을 따로 보여 주지 않고 Xcode 가 빌드할 때 자동으로 만들기 때문에, 파일에 직접 쓰려면 먼저 파일을 만들어야 합니다. Dictionary 키를 넣다가 Xcode 가 종료되는 경우에도 이 방법으로 넣을 수 있습니다.
1

파일이 있는지 확인

왼쪽 프로젝트 네비게이터에 Info.plist 파일이 보이면 3단계로 갑니다.
2

파일 만들기

[File] → [New] → [File from Template…] 에서 Property List 를 고르고, 이름을 Info.plist 로, 저장 위치를 앱 타깃 폴더로 합니다. 그다음 [Build Settings] 탭에서 Info.plist File 을 검색해 값에 타깃이름/Info.plist 를 넣습니다. Generate Info.plist File 은 Yes 그대로 둡니다 — Xcode 가 자동 생성 항목과 이 파일을 합쳐 줍니다.
3

XML 붙여넣기

Info.plist 를 우클릭 → Open As → Source Code 로 열고, iOS 권한 설정의 XML 을 <dict> 와 </dict> 사이에 붙여 넣습니다.

권한 요청 (Nearby Interaction)

로케이터의 측위 정보는 애플의 Nearby Interaction을 사용합니다. requestPermission() 은 시스템 권한 창을 띄우고, 허용 여부는 사용자가 정합니다.
한 번 거부되면 앱에서 다시 물을 수 없으므로 설정 앱에서 권한을 켜도록 안내해야 합니다.

위치 항상 권한

iOS 27.2 이상에서는 위치 접근 권한이 ‘항상 사용’ 이어야 층을 찾을 수 있습니다(BLE 비콘 영역 감지). iOS 27.1 이하는 ‘앱 사용중에만 허용’ 으로 충분합니다.
SDK 는 ‘항상’ 권한을 요청하지 않으며, 권한이 없어도 SDK 는 시작되지만 층을 찾지 못합니다. 사용자가 거절했다면 설정 앱으로 안내해 주세요.

디버그 로그

디버그 로그 확인시 SDK 초기화문 선언(initialize) 직전에 등록해 주세요.
아래처럼 print 로 찍은 로그는 Xcode 디버그 콘솔에서 확인할 수 있어요.

문제 해결하기

에러 코드

개발 중 발생하는 오류 내용을 안내합니다.