[TOC]
![](https://box.kancloud.cn/ca9e75e702af52c51703b5cde3c9081b_472x213.png)
## 第一步:获取appid
appid是第三方应用集成讯飞开放平台SDK的身份标识,SDK静态库和appid是绑定的,每款应用必须保持唯一,否则会出现10407错误码。appid在开放平台申请应用时可以获得,下载SDK后可从SDK中sample文件夹的Demo工程里找到(例如: /sample/MSCDemo/MSCDemo/Definition.h 的APPID_VALUE)
## 第二步:工程配置
### 添加库
将开发工具包中lib目录下的iflyMSC.framework添加到工程中。同时请将Demo中依赖的其他库也添加到工程中。 按下图示例添加 SDK 所需要的 iOS系统库:
![](https://box.kancloud.cn/2df1d43b23bfc1c1c07d6605b911fe40_236x344.png)
|库名称 |添加范围 |功能 |
| :---: | :---: | --- |
|iflyMSC.framework |必要 |讯飞开放平台静态库。 |
| libz.tbd | 必要 |用于压缩、加密算法。 |
| AVFoundation.framework |必要 |用于系统录音和播放 。 |
|SystemConfiguration.framework |系统库 | 用于系统设置。 |
| Foundation.framework | 必要 | 基本库。 |
|CoreTelephoney.framework |必要 |用于电话相关操作。 |
|AudioToolbox.framework | 必要 |用于系统录音和播放。 |
|UIKit.framework | 必要 | 用于界面显示。 |
| CoreLocation.framework | 必要 | 用于定位。 |
|Contacts.framework |必要 |用于联系人。 |
| AddressBook.framework |必要 | 用于联系人。 |
| QuartzCore.framework |必要 |用于界面显示。 |
| CoreGraphics.framework | 必要 |用于界面显示。 |
|libc++.tbd | 离线识别,Aiui必要 | 用于支持C++。 |
|Libicucore.tbd | Aiui必要 | 系统正则库。 |
**注意**:
1. 添加iflyMSC.framework时,请检查工程BuildSetting中的framwork path的设置,如果出现找不到framework的情况,可以将path清空,在Xcode中删除framework,然后重新添加。
2. iflyMSC.framework最低支持iOS 8.0。
3. 如果使用了离线识别,还需要增加libc++.tbd。
4. 如果使用aiui,需要添加libc++.tbd,libicucord.tbd。
### 设置Bitcode
在Xcode 7,8默认开启了Bitcode,而Bitcode 需要工程依赖的所有类库同时支持。MSC SDK暂时还不支持Bitcode,可以先临时关闭。后续MSC SDK支持Bitcode 时,会在讯飞开放平台上进行SDK版本更新,QQ支持群中同时会有相关提醒,请关注。关闭此设置,只需在Targets - Build Settings 中搜索Bitcode 即可,找到相应选项,设置为NO。
![](https://box.kancloud.cn/7e7bff849e338cbdb47f78d7ebe04a8f_1714x428.jpg)
### 用户隐私权限配置
iOS 10发布以来,苹果为了用户信息安全,加入隐私权限设置机制,让用户来选择是否允许。
隐私权限配置可在info.plist 新增相关privacy字段,MSC SDK中需要用到的权限主要包括麦克风权限、联系人权限和地理位置权限:
~~~
<key>NSMicrophoneUsageDescription</key>
<string></string>
<key>NSLocationUsageDescription</key>
<string></string>
<key>NSLocationAlwaysUsageDescription</key>
<string></string>
<key>NSContactsUsageDescription</key>
<string></string>
~~~
即在Info.plist 中增加下图设置:
![](https://box.kancloud.cn/5d88e0a5a9f759ab8cca27e17486250d_517x77.png)
## 第三步:初始化
初始化示例:
~~~
//Appid是应用的身份信息,具有唯一性,初始化时必须要传入Appid。
NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@", @"YourAppid"];
[IFlySpeechUtility createUtility:initString];
~~~
| 参数 | 说明 | 必填 |
| :---: | --- | :---: |
| appid |8位16进制数字字符串,应用的唯一标识,与下载的SDK一一对应。 |是 |
| usr | 开发者在云平台上注册的账号。 |否 |
| pwd | 账号对应的密码,与账号同时存在。 |否 |
**注意**:
初始化是一个异步过程,可放在App启动时执行初始化,具体代码可以参照Demo的MSCAppDelegate.m。
#### **AIUI初始化**
如果使用的是aiui的业务,那么需要执行aiui的初始化模块。具体可以参照demo的AiuiService。
初始化的配置文件是aiui.cfg,请关注demo的具体内容。
注意:调用aiui初始化的代码文件,请修改成.mm的形式。
~~~
//包含头文件
#include "iflymsc/AIUI.h"
#include "iflymsc/AIUIConstant.h"
//aiui初始化,请aiui.cfg和meta_vad_16k.jet文件,需要从demo中获取。
void AiuiInitialize()
{
//读取配置参数
NSString *appPath = [[NSBundle mainBundle] resourcePath];
NSString *cfgFilePath = [[NSString alloc] initWithFormat:@"%@/aiui.cfg",appPath];
NSString *cfg = [NSString stringWithContentsOfFile:cfgFilePath encoding:NSUTF8StringEncoding error:nil];
//设置模型vad的资源路径
NSString *vadFilePath = [[NSString alloc] initWithFormat:@"%@/meta_vad_16k.jet",appPath];
//将cfg里的vad_res_path字符串替换成模型vad的资源路径
NSString *cfgString = [cfg stringByReplacingOccurrencesOfString:@"vad_res_path" withString:vadFilePath];
const char *cfgBuffer = [cfgString UTF8String];
m_angent = IAIUIAgent::createAgent(cfgBuffer, &m_listener);
if (NULL != m_angent)
{
IAIUIMessage * wakeupMsg = IAIUIMessage::create(AIUIConstant::CMD_WAKEUP);
m_angent->sendMessage(wakeupMsg);
wakeupMsg->destroy();
}
}
~~~
#### **添加AIUI结果解析文件**
解析aiui结果时需要在工程中添加**结果解析文件**,否则编译会报错。
文件在Demo中的位置:MSCDemo -> tools -> jsoncpp。
## 第四步:启动服务
所有的服务皆遵循如下的流程,如下图:
![](https://box.kancloud.cn/0586f5bdde0889b27631fad869411ee9_231x210.png)
所有服务的API详细说明可参见:http://mscdoc.xfyun.cn/ios/api/
AIUI的API详细说明可参见:http://mscdoc.xfyun.cn/aiui/develop_manual.pdf