빠른 시작
이 가이드에서는 AIBuds SDK iOS의 기본 설정과 자주 사용하는 작업을 순서대로 설명합니다.
AI를 활용해 구현
AI로 구현
AI로 이 워크플로 구현
공식 “AIBuds SDK 통합” 스킬을 사용해 앱에 맞게 구현하세요.
https://docs-aibuds.github.io/ko/skills/integrate-aibuds-sdk을 읽고 지침을 따르세요. 이 스킬로 “AIBuds SDK 통합”을 이 iOS 프로젝트에 구현하고 검증하세요.1단계: SDK 가져오기
SDK를 사용하는 파일에서 필요한 모듈을 가져옵니다:
- Swift
- Objective-C
import AIBuds
import ABMate
import AIBudsLog
import AIBudsAIFoundation
import AIBudsAI
import AIBudsStarBurst
import AIBudsMagicHelper
import AIBudsVoiceAssistant
import AIBudsXLFacility
import AIBudsLiveStream
import AIBudsCrashReporter
import AIBudsAllInOne#import <ABMate/ABMate-Swift.h>
#import <AIBuds/AIBuds-Swift.h>
#import <AIBuds/AIBuds.h>
#import <AIBudsAI/AIBudsAI-Swift.h>
#import <AIBudsAIFoundation/AIBudsAIFoundation-Swift.h>
#import <AIBudsAllInOne/AIBudsAllInOne-Swift.h>
#import <AIBudsCrashReporter/AIBudsCrashReporter-Swift.h>
#import <AIBudsCrashReporter/AIBudsCrashReporter.h>
#import <AIBudsLiveStream/AIBudsLiveStream-Swift.h>
#import <AIBudsLog/AIBudsLog-Swift.h>
#import <AIBudsMagicHelper/AIBudsMagicHelper-Swift.h>
#import <AIBudsStarBurst/AIBudsStarBurst-Swift.h>
#import <AIBudsVoiceAssistant/AIBudsVoiceAssistant-Swift.h>
#import <AIBudsXLFacility/AIBudsXLFacility-Swift.h>2단계: SDK 초기화
앱이 시작될 때 AIBuds SDK를 초기화합니다. 일반적으로 AppDelegate 또는 SceneDelegate에서 수행합니다:
- Swift
- Objective-C
// AppDelegate.swift
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
// Initialize AIBuds SDK with Full Installation
initWithFullInstallation()
// Initialize AIBuds SDK with Custom Installation
//initWithCustomInstallation()
return true
}
/// Initialize AIBuds SDK with Full Installation
private func initWithFullInstallation() {
// Initialize AIBuds SDK
if !AllInOneSDK.init(withDelegate: self) {
print("Failed to initialize AIBuds AllInOne SDK.")
}
// Install crash reporter
AllInOneSDK.installCrashReporter { reportFilePath in
print("Last crash report path: \(reportFilePath ?? "")")
} reportListUpdateCallback: {
print("Crash report list updated")
}
// Set user info for crash reporter
CrashReporterSDK.setUserInfo("Tom", forKey: "User Name")
CrashReporterSDK.setUserInfo("199", forKey: "User ID")
// Start AI dashboard
AllInOneSDK.startAIDashboard()
}
/// Initialize AIBuds SDK with Custom Installation
private func initWithCustomInstallation() {
// Set XLFacility plugin
AIBudsLogSDK.setXLFacilityPlugin(XLFacilitySDK.shared())
// Initialize AIBuds SDK with all Ble SDKs you would like to integrate into your app
let sdkConfiguration = SDKConfiguration.default()
// Set log level to verbose
sdkConfiguration.logLevel = .verbose
let success = AIBudsSDK.initialize(
[ABMateSDK.shared()],
configuration: sdkConfiguration,
delegate: self)
if !success {
print("AIBudsSDK initialize failed.")
}
// Install StarBurst AI plugin
AIBudsSDK.setStarBurstAIPlugin(StarBurstAuthPlugin.shared())
// Install MltCloud AI plugin
AIBudsSDK.setMltCloudAIPlugin(MltCloudAuthPlugin.shared())
// Install OnDeviceVoiceAssistant plugin
AIBudsSDK.setOnDeviceVoiceAssistantPlugin(OnDeviceVoiceAssistantPlugin.shared())
// Initialize AI SDK with all AI SDKs you would like to integrate into your app
let aiSuccess = AIBudsAISDK.initialize([
StarBurstSDK.shared(),
MagicHelperSDK.shared(),
])
if !aiSuccess {
print("AIBudsAISDK initialize failed.")
}
// Install crash reporter
CrashReporterSDK.installCrashReporter { reportFilePath in
print("Last crash report path: \(reportFilePath ?? "")")
} reportListUpdateCallback: {
print("Crash report list updated")
}
// Set user info for crash reporter
CrashReporterSDK.setUserInfo("Tom", forKey: "User Name")
CrashReporterSDK.setUserInfo("199", forKey: "User ID")
// Start AI dashboard
AIDashboardSDK.start()
}// AppDelegate.m
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Initialize AIBuds SDK with Full Installation
[self initWithFullInstallation];
// Initialize AIBuds SDK with Custom Installation
//[self initWithCustomInstallation];
return YES;
}
/// Initialize AIBuds SDK with Full Installation
- (void)initWithFullInstallation {
// Initialize AIBuds SDK
if (![AIBudsAllInOneSDK initWithDelegate:self]) {
NSLog(@"%@", @"Failed to initialize AIBuds AllInOne SDK.");
}
// Install crash reporter
[AIBudsAllInOneSDK
installCrashReporterWithLastCrashReportCallback:^(NSString *_Nullable reportFilePath) {
NSLog(@"Last crash report path: %@", reportFilePath);
}
reportListUpdateCallback:^{
NSLog(@"Crash report list updated");
}];
// Set user info for crash reporter
[AIBudsCrashReporterSDK setUserInfo:@"Tom" forKey:@"User Name"];
[AIBudsCrashReporterSDK setUserInfo:@"199" forKey:@"User ID"];
// Start AI dashboard
[AIBudsAllInOneSDK startAIDashboard];
}
/// Initialize AIBuds SDK with Custom Installation
- (void)initWithCustomInstallation {
// Set XLFacility plugin
[AIBudsLogSDK setXLFacilityPlugin:[AIBudsXLFacilitySDK shared]];
// Initialize AIBuds SDK with all Ble SDKs you would like to integrate into your app
AIBudsSDKConfiguration *sdkConfiguration = [AIBudsSDKConfiguration defaultConfiguration];
// Set log level to verbose
sdkConfiguration.logLevel = AIBudsLogLevelVerbose;
BOOL success = [AIBudsSDK initWithBleSDKs:@[ [ABMateSDK shared] ]
configuration:sdkConfiguration
delegate:self];
if (!success) {
NSLog(@"%@", @"AIBudsSDK initialize failed.");
}
// Install StarBurst AI plugin
[AIBudsSDK setStarBurstAIPlugin:[AIBudsStarBurstAuthPlugin shared]];
// Install MltCloud AI plugin
[AIBudsSDK setMltCloudAIPlugin:[AIBudsMltCloudAuthPlugin shared]];
// Install OnDeviceVoiceAssistant plugin
[AIBudsSDK setOnDeviceVoiceAssistantPlugin:[AIBudsOnDeviceVoiceAssistantPlugin shared]];
// Initialize AI SDK with all AI SDKs you would like to integrate into your app
success = [AIBudsAISDK
initWithAISDKs:@[ [AIBudsStarBurstSDK shared], [AIBudsMagicHelperSDK shared] ]];
if (!success) {
NSLog(@"%@", @"AIBudsAISDK initialize failed.");
}
// Install crash reporter
[AIBudsCrashReporterSDK
installCrashReporterWithLastCrashReportCallback:^(NSString *_Nullable reportFilePath) {
NSLog(@"Last crash report path: %@", reportFilePath);
}
reportListUpdateCallback:^{
NSLog(@"Crash report list updated");
}];
// Set user info for crash reporter
[AIBudsCrashReporterSDK setUserInfo:@"Tom" forKey:@"User Name"];
[AIBudsCrashReporterSDK setUserInfo:@"199" forKey:@"User ID"];
// Start AI dashboard
[AIDashboardSDK start];
}3단계: 기기 검색
연결 가능한 AIBuds 기기를 검색합니다:
- Swift
- Objective-C
// Start scanning for devices
AIBudsSDK.startScanning(
deviceFoundHandler: { device, isExistingDevice in
print("Found device: \(device.name), RSSI: \(device.rssi)")
print(isExistingDevice ? "Already stored" : "New device")
},
completion: {
print("Scanning stopped")
}
)// Start scanning for devices
[AIBudsSDK startScanningWithTimeout:nil
deviceFoundHandler:^(id<AIBudsFoundDeviceConvertible> _Nonnull device,
BOOL isExistingDevice) {
NSLog(@"Found device: %@, RSSI: %@", device.name, device.rssi);
}
completion:^{
}];4단계: 기기 추가
검색된 기기를 '내 기기'에 추가하면 앱을 다시 실행해도 계속 사용할 수 있습니다. 검색 결과의 FoundDeviceConvertible을 makeStorableDeviceFromDiscovered(_:)로 저장 가능한 형식으로 변환한 뒤 StoredDevicesMgr에 저장합니다:
- Swift
- Objective-C
func store(_ discoveredDevice: FoundDeviceConvertible) {
// Convert the SDK scan result into a persistent device.
guard let device = AIBudsSDK.makeStorableDeviceFromDiscovered(discoveredDevice) else {
return
}
// Optional app-owned display information.
device.screenName = device.name
device.thumbnail = UIImage(named: "icon.glasses")
device.customContent = "Smart Glasses"
if StoredDevicesMgr.addDevice(device) {
AIBudsSDK.stopScanning()
navigationController?.popViewController(animated: true)
}
}- (void)storeDiscoveredDevice:(id<AIBudsFoundDeviceConvertible>)discoveredDevice {
// Convert the SDK scan result into a persistent device.
id<AIBudsDeviceConvertible> device =
[AIBudsSDK makeStorableDeviceFromDiscovered:discoveredDevice];
if (device == nil) {
return;
}
// Optional app-owned display information.
device.screenName = device.name;
device.thumbnail = [UIImage imageNamed:@"icon.glasses"];
device.customContent = @"Smart Glasses";
if ([AIBudsStoredDevicesMgr addDevice:device]) {
[AIBudsSDK stopScanning];
[self.navigationController popViewControllerAnimated:YES];
}
}5단계: 기기에 연결
저장된 기기에 ConnectParams를 사용해 연결합니다. AI 인증 매개변수를 전달하면 연결 과정에서 SDK가 사용할 AI 서비스를 함께 인증합니다:
- Swift
- Objective-C
let device = devices[indexPath.item]
let param = ConnectParams()
let aiAuthParams = AIAuthParams()
// StarBurst AI auth
let starBurstAuthParams = StarBurstAIAuthParams()
starBurstAuthParams.productId = configs["STARBURST_PRODUCTID"]
if let ppeEnv = configs["STARBURST_PPEENV"] as? String, !ppeEnv.isEmpty {
starBurstAuthParams.ppeEnv = ppeEnv
}
aiAuthParams.starburst = starBurstAuthParams
// MltCloud AI auth
let mltCloudAuthParams = MltCloudAIAuthParams()
mltCloudAuthParams.channelId = configs["MLTCLOUD_CHANNELID"]
aiAuthParams.mltcloud = mltCloudAuthParams
param.aiAuthParams = aiAuthParams
param.userId = "199"
// Connect to the device
device.connect(param)id<AIBudsDeviceConvertible> device = self.devices[indexPath.item];
AIBudsConnectParams *param = [AIBudsConnectParams new];
AIBudsAIAuthParams *aiAuthParams = [AIBudsAIAuthParams new];
// StarBurst AI auth
AIBudsStarBurstAIAuthParams *starBurstAuthParams = [AIBudsStarBurstAIAuthParams new];
starBurstAuthParams.productId = configs[@"STARBURST_PRODUCTID"];
NSString *ppeEnv = configs[@"STARBURST_PPEENV"];
if ([ppeEnv isKindOfClass:[NSString class]] && [ppeEnv length] > 0) {
starBurstAuthParams.ppeEnv = ppeEnv;
}
aiAuthParams.starburst = starBurstAuthParams;
// MltCloud AI auth
AIBudsMltCloudAIAuthParams *mltCloudAuthParams = [AIBudsMltCloudAIAuthParams new];
mltCloudAuthParams.channelId = configs[@"MLTCLOUD_CHANNELID"];
aiAuthParams.mltcloud = mltCloudAuthParams;
param.aiAuthParams = aiAuthParams;
param.userId = @"199";
// Connect to the device
[device connectWithParams:param];6단계: 명령 전송
연결이 완료되면 기기에 명령을 보낼 수 있습니다:
- Swift
- Objective-C
// Example: Set device time
guard let device = device as? DeviceInfoAPI else { return }
let date = Date()
device.setDeviceTime(date) { success, statusCode, error in
if success {
print("Device time set successfully")
} else {
print("Failed to set device time: \(error?.localizedDescription ?? "Unknown error")")
}
}// Example: Set device time
id<AIBudsDeviceInfoAPI> device = (id<AIBudsDeviceInfoAPI>)self.device;
if ([device conformsToProtocol:@protocol(AIBudsDeviceInfoAPI)]) {
NSDate *date = [NSDate date];
[device
setDeviceTime:date
completion:^(BOOL success, NSNumber *_Nullable statusCode, NSError *_Nullable error) {
if (success) {
NSLog(@"Device time set successfully");
} else {
NSLog(@"Failed to set device time: %@", error.localizedDescription);
}
}];
}7단계: 기기 델리게이트 처리
DeviceDelegate 프로토콜을 채택하면 연결 수명 주기 이벤트를 받을 수 있습니다. 모든 메서드는 @objc optional이므로 필요한 콜백만 구현하세요:
- Swift
- Objective-C
// Mark your class as the device's delegate
device.delegate = self
// Implement the optional delegate methods
extension YourViewController: DeviceDelegate {
func didStartConnectingDevice(_ device: DeviceConvertible) {
print("Connecting to \(device.name)…")
}
func didConnectedToDevice(_ device: DeviceConvertible) {
print("Connected to \(device.name)")
}
func didFailToConnectDevice(_ device: DeviceConvertible?, error: NSError?) {
print("Failed to connect: \(error?.localizedDescription ?? "Unknown error")")
}
func device(_ device: DeviceConvertible?, didDisconnectWithError error: NSError?) {
if let error {
print("Disconnected with error: \(error.localizedDescription)")
} else {
print("Disconnected")
}
}
func deviceDidReady(_ device: DeviceConvertible) {
print("Device ready: \(device.name)")
}
/// ... other delegate methods...
}// YourViewController.h — declare conformance to AIBudsDeviceDelegate
@interface YourViewController : UIViewController <AIBudsDeviceDelegate>
@end
// YourViewController.m
@implementation YourViewController
// Mark your class as the device's delegate
self.device.delegate = self;
// Implement the optional delegate methods
- (void)didStartConnectingDevice:(id<AIBudsDeviceConvertible>)device {
NSLog(@"Connecting to %@…", device.name);
}
- (void)didConnectedToDevice:(id<AIBudsDeviceConvertible>)device {
NSLog(@"Connected to %@", device.name);
}
- (void)didFailToConnectDevice:(id<AIBudsDeviceConvertible>)device error:(NSError *)error {
NSLog(@"Failed to connect: %@", error.localizedDescription);
}
- (void)device:(id<AIBudsDeviceConvertible>)device didDisconnectWithError:(NSError *)error {
if (error) {
NSLog(@"Disconnected with error: %@", error.localizedDescription);
} else {
NSLog(@"Disconnected");
}
}
- (void)deviceDidReady:(id<AIBudsDeviceConvertible>)device {
NSLog(@"Device ready: %@", device.name);
}
/// ... other delegate methods...
@end8단계: 기기 연결 해제
기기 사용을 마치면 연결을 해제합니다:
- Swift
- Objective-C
// Disconnect from a device
device.disconnect()// Disconnect from a device
id<AIBudsDeviceConvertible> device = self.device;
[device disconnect];예제 앱
실제 앱에서 SDK를 사용하는 방법은 AIBudsSDK-Demo 프로젝트에서 확인할 수 있습니다.
다음 단계
기본 사용법을 익혔다면 SDK의 각 기능을 살펴보세요: