iOS 工程配置

v2.0 及以后版本适用此文档 v2.0以前文档

本文是为使用iOS SDK做一些通用的准备和说明,包括IDE和工程配置等。

一 支持平台

  • 直播、消息、文档 SDK 支持 iOS 8.0 及以上系统
  • 互动 SDK 支持 iOS 9.0 及以上系统
  • 录屏直播 SDK 支持 iOS 12.0 及以上系统

二 开发环境

  • Xcode 8或更高版本
  • OS X 10.10或更高版本

三 Xcode工程设置

下面通过一个简单的iOS Application工程,说明如和在Xcode工程中配置SDK。

1 创建iOS 工程

新建一个 TestProject 的iOS工程

选择ios 单文档app 并点击Next按钮

填写工程名并 记录Bundle ID 并去开发者中心【设置iOS包名】 点击Next按钮选择项目存储位置,再点击Create按钮,即完成IOS工程创建

2 SDK 获取部署

根据自身业务下载相关 SDK

直播、点播 SDK 包括: 下载【直播、点播 SDK

VHLSS.framework
VHCore.framework
VhallLiveBaseApi.framework

互动 SDK 包括 : 下载【互动 SDK

VHRTC.framework
VHCore.framework
WebRTC.framework

消息 SDK 包括 : 下载【消息 SDK

VHIM.framework
VHCore.framework

文档演示 SDK 包括 : 下载【文档演示 SDK

VHDoc.framework
VHCore.framework

录屏直播 SDK 包括 : 下载【录屏直播 SDK

VHScreenShare.framework
VhallLiveBaseApi.framework

将下载下来的文件夹拷贝至工程目录,然后拖动到Xcode中。目录结构如下图所示:

注意事项 : 工程 Build Settings -> Framework Search Paths 设置 framework 路径,否则提示库找不到错误

要在 Embedded BinAries 中添加用到的 framework 库,否则启动 App 会报 Reason: image not found 错误

4 工程设置修改

  • Build Setting 中 Enable Bitcode 设置为NO

如下图:

  • 设置Info.plist中 App Transport Security Settings -> Allow Arbitrary Loads 设置为 YES
  • 设置Info.pplist中 Privacy - Camera Usage Description 是否允许使用相机
  • 设置Info.pplist中 Privacy - Microphone Usage Description 是否允许使用麦克风

如下图:

四 初始 SDK

下面在TestProject的代码中,调用SDK的接口,设置appID 获取SDK版本信息,以验证工程设置是否正确。

1 引用头文件

在AppDelegate.m开头引用SDK的头文件:

#import <VHCore/VHLiveBase.h>

2 添加调用代码

在application: didFinishLaunchingWithOptions:方法中添加代码: 注: setThirdPartyUserId 方法可以直接设置消息服务中 context 自定义消息

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [VHLiveBase registerApp:@"xxxxxxxxx" context:@{@"nick_name":@"xxxxxx",@"avatar":@"xxxxxx"}];//AppID:xxxxxxxxx
    [VHLiveBase setThirdPartyUserId:@"xxxxxxxx"];//第三方账号id:xxxxxxxx
    NSLog(@"SDK Version: %@",[VHLiveBase getSDKVersion]);
    return YES;
}

3 编译运行

如果前面各个步骤都操作正确的话,TestProject工程应该可以顺利编译通过。在Debug模式下运行APP,Xcode的Console窗格会打印出SDK的版本信息。

具体步骤如下图:

至此,工程配置完成。

五 上传App Store问题

打包上传 App Store 如果报 x86_64 或者 i386 的错误,请使用 liop 命令去掉 错误提示的 framework 的模拟器库。

使用 liop 命令 去掉模拟器库即可,去除步骤如下:

1 打开终端

所有程序中找到它,点击打开或使用聚焦搜索(点按菜单栏右上角的搜索图标,或按下 Command-空格键),输入「终端」或「Terminal」,看到终端被选中了按下回车即可。

2 拆分多架构支持的静态库

比如 VhallLiveBaseApi.framework,

1)cd到库的文件夹cd /Users/xxxx/Desktop/VHallSDK

2)使用lifo -info 可以查看包含的架构 lipo -info VhallLiveBaseApi.framework/VhallLiveBaseApi

Architectures in the fat file: VhallLiveBaseApi are: i386 x86_64 armv7 arm64

3)移除x86_64, i386 模拟器库,上传 App Store 时会报错,用以下命令移除

lipo -remove x86_64 VhallLiveBaseApi.framework/VhallLiveBaseApi -o VhallLiveBaseApi.framework/VhallLiveBaseApi

lipo -remove i386 VhallLiveBaseApi.framework/VhallLiveBaseApi -o VhallLiveBaseApi.framework/VhallLiveBaseApi

4)再次查看lipo -info VhallLiveBaseApi.framework/VhallLiveBaseApi

Architectures in the fat file: VhallLiveBaseApi are: armv7 arm64

3 合并多个架构静态库

lipo -create VhallLiveBaseApi.framework/VhallLiveBaseApi.i386 VhallLiveBaseApi.framework/VhallLiveBaseApi.arm -output VhallLiveBaseApi.framework/VhallLiveBaseApi

六 VHLiveBase 说明

注册app

/**
 *  注册app
 *  @param appid  http://www.vhallyun.com/ 控制台中创建app 并设置包名 获得
 */
+ (BOOL) registerApp:(NSString *)appid;

/**
 *  注册app
 *  @param appid  http://www.vhallyun.com/ 控制台中创建app 并设置包名 获得
 *  @param completeBlock  SDK初始化成功回调, error 成功为 nil  如果不成功会5s重试一次
 */
+ (BOOL) registerApp:(NSString *)appid completeBlock:(void(^)(NSError *error)) completeBlock;

/**
 *  注册app
 *  @param appid  http://www.vhallyun.com/ 控制台中创建app 并设置包名 获得
 *  @param host   平台域名如api.vhallyun.com
 *  @param completeBlock  SDK初始化成功回调, error 成功为 nil  如果不成功会5s重试一次
 */
+ (BOOL) registerApp:(NSString *)appid host:(NSString*)host completeBlock:(void(^)(NSError *error)) completeBlock;

设置第三方用户id

/**
 *  设置第三方用户id  建议使用用户id保持唯一性
 *  @param third_party_user_id  第三方用户id 使用您的App登录后获得用户id即可
 */
+ (BOOL) setThirdPartyUserId:(NSString *)third_party_user_id;

/**
 *  设置第三方用户id  建议使用用户id保持唯一性
 *  @param third_party_user_id  第三方用户id 使用您的App登录后获得用户id即可
 *  @param context 对应third_party_user_id 自定义信息用于接IM收消息的context中,如:@{@"nick_name":@"xxxx",@"avatar":@"xxxx"};
     为 nil 时,聊天消息会读取通过API设置nick_name和avatar。
 */
+ (BOOL) setThirdPartyUserId:(NSString *)third_party_user_id context:(NSDictionary*)context;

设置日志等级

//日志等级
typedef NS_ENUM(NSInteger, VHLogLevel) {
    VHLogLevelNone    = 0,    //NONE
    VHLogLevelError   = 1,    //Error
    VHLogLevelWarning = 2,    //Warning
    VHLogLevelInfo    = 3,    //Info
    VHLogLevelDebug   = 4,    //Debug
};

/**
 *  设置日志等级
 *  @param level  日志等级
 */
+ (void) setLogLevel:(VHLogLevel)level;

设置日志输出方式

/**
 *  设置日志是否输出到控制台
 *  @param isPrint  否输出到控制台
 */
+ (void) printLogToConsole:(BOOL)isPrint;//默认不显示到控制台

设置AppGroup 用于 录屏直播功能

/**
 *  设置AppGroup 用于 录屏直播功能
 *  @param appGroup  AppGroup
 */
+ (BOOL) setAppGroup:(NSString *)appGroup;

初始化状态

/**
 *  当前SDK 是否已初始化
 */
+ (BOOL) isInited;

获得 VHCore 版本号

/**
 *  获得当前SDK 基础模块版本号
 */
+ (NSString *) getSDKVersion;