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问题
上架报错90080,90087,90209,90125 解决办法
解决办法:TARGETS->Build Phases->点击加号选择New Run Script Phase->然后复制粘贴下面代码

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
# 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
六 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;
