组件导入
更新时间: 2024/11/14 18:33:09
IM UIKit (iOS) 采用 Cocoapods 进行构建,您可以采用添加远端仓库依赖或者本地代码依赖的方式(同一个组件库只能选择一种依赖方式),将所需组件快速导入到您的项目中。
- 添加远端仓库依赖:适用于采用 IM UIKit 默认界面的集成。
- 添加本地代码依赖:适用于通过 IM UIKit 进行界面自定义的集成。
前提条件
已准备如下开发环境/工具:
- iOS 10.0 及以上版本
- Xcode 14
导入组件
您可通过添加远端仓库依赖或者添加本地代码依赖,导入组件。
添加远端仓库依赖
本节介绍如何通过 Cocoapods 添加远程依赖,将您业务所需的的 UI 组件导入到您的项目,进行项目构建。
-
创建 Podfile 文件,并在 Podfile 文件中引入 Ui 组件。
引入 UI 组件时,需要指定相同版本的基础 Kit 库引入,否则可能导致后续出现报错。具体可参见下文的常见问题排查。
IM UIKit 底层依赖 NIM SDK。
- 若引入 UI 组件时不指定 NIM SDK 版本,那么将默认引入当前兼容的最新版本(参考[更新日志](https://doc.yunxin.163.com/messaging-uikit/guide/jE5MTA5NjA?platform=iOS))。
- 若引入 UI 组件时需要使用指定 NIM SDK 的版本,那么需要在引入时填写正确的版本号,具体请参考以下示例代码。
:::
swift# Uncomment the next line to define a global platform for your project
platform :ios, '11.0'
# 请使用您的真实项目名称替换 your project name
target 'your project name' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# 基础 Kit 库
pod 'NECommonUIKit', '9.7.1'
pod 'NECommonKit', '9.6.6'
pod 'NECoreIMKit', '9.6.7'
pod 'NECoreKit', '9.6.6'
pod 'NEChatKit', '9.7.3'
# UI 组件,依次为通讯录组件、会话列表组件、会话(聊天)组件、群相关设置组件
pod 'NEContactUIKit', '9.7.3'
pod 'NEConversationUIKit', '9.7.3'
pod 'NEChatUIKit', '9.7.3'
pod 'NETeamUIKit', '9.7.3'
# 扩展库-地理位置组件
pod 'NEMapKit', '9.7.3'
# 扩展库-呼叫组件
pod 'NIMSDK_LITE','9.14.2'
pod 'NERtcCallKit/NOS_Special', '2.2.0'
pod 'NERtcCallUIKit/NOS_Special', '2.2.0'
# 扩展库,依次为 RTC 音视频基础组件、RTC 音视频神经网络组件(使用背景虚化功能需要集成)、RTC 音视频背景分割组件(使用背景虚化功能需要集成)
pod 'NERtcSDK/RtcBasic', '5.5.2'
pod 'NERtcSDK/Nenn'
pod 'NERtcSDK/Segment'
end
swift# Uncomment the next line to define a global platform for your project
platform :ios, '11.0'
# 请使用您的真实项目名称替换 your project name
target 'your project name' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# 指定 NIM SDK 版本,以9.11.0 为例
pod 'NIMSDK_LITE','9.11.0'
# 基础 Kit 库
pod 'NECoreKit', '9.6.6'
pod 'NECoreIMKit/NOS_Special', '9.6.7'
pod 'NEChatKit/NOS_Special', '9.7.3'
pod 'NECommonKit', '9.6.6'
pod 'NECommonUIKit', '9.7.1'
# UI 组件,依次为通讯录组件、会话列表组件、会话(聊天)组件、群相关设置组件
pod 'NEContactUIKit/NOS_Special', '9.7.3'
pod 'NEConversationUIKit/NOS_Special', '9.7.3'
pod 'NEChatUIKit/NOS_Special', '9.7.3'
pod 'NETeamUIKit/NOS_Special', '9.7.3'
# 扩展库-地理位置组件
pod 'NEMapKit/NOS_Special', '9.7.3'
# 扩展库-呼叫组件
pod 'NERtcCallKit/NOS_Special', '2.2.0'
pod 'NERtcCallUIKit/NOS_Special', '2.2.0'
# 扩展库,依次为 RTC 音视频基础组件、RTC 音视频神经网络组件(使用背景虚化功能需要集成)、RTC 音视频背景分割组件(使用背景虚化功能需要集成)
pod 'NERtcSDK/RtcBasic', '5.5.2'
pod 'NERtcSDK/Nenn'
pod 'NERtcSDK/Segment'
end
swift# Uncomment the next line to define a global platform for your project
platform :ios, '11.0'
# 请使用您的真实项目名称替换 your project name
target 'your project name' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# 基础 Kit 库
pod 'NECoreKit', '9.6.6'
pod 'NECoreIMKit/FCS', '9.6.7'
pod 'NEChatKit/FCS', '9.7.3'
pod 'NECommonKit', '9.6.6'
pod 'NECommonUIKit', '9.7.1'
# UI 组件,依次为通讯录组件、会话列表组件、会话(聊天)组件、群相关设置组件
pod 'NEContactUIKit/FCS', '9.7.3'
pod 'NEConversationUIKit/FCS', '9.7.3'
pod 'NEChatUIKit/FCS', '9.7.3'
pod 'NETeamUIKit/FCS', '9.7.3'
# 扩展库-地理位置组件
pod 'NEMapKit/FCS', '9.7.3'
# 扩展库-呼叫组件
pod 'NIMSDK_LITE/FCS','9.14.2'
pod 'NERtcCallKit/FCS_Special', '2.2.0'
pod 'NERtcCallUIKit/FCS_Special', '2.2.0'
# 扩展库,依次为 RTC 音视频基础组件、RTC 音视频神经网络组件(使用背景虚化功能需要集成)、RTC 音视频背景分割组件(使用背景虚化功能需要集成)
pod 'NERtcSDK/RtcBasic', '5.5.2'
pod 'NERtcSDK/Nenn'
pod 'NERtcSDK/Segment'
end
swift# Uncomment the next line to define a global platform for your project
platform :ios, '11.0'
# 请使用您的真实项目名称替换 your project name
target 'your project name' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# 指定 NIM SDK 版本,以9.11.0 为例
pod 'NIMSDK_LITE/FCS','9.11.0'
# 基础 Kit 库
pod 'NECoreKit', '9.6.6'
pod 'NECoreIMKit/FCS_Special', '9.6.7'
pod 'NEChatKit/FCS_Special', '9.7.3'
pod 'NECommonKit', '9.6.6'
pod 'NECommonUIKit', '9.7.1'
# UI 组件,依次为通讯录组件、会话列表组件、会话(聊天)组件、群相关设置组件
pod 'NEContactUIKit/FCS_Special', '9.7.3'
pod 'NEConversationUIKit/FCS_Special', '9.7.3'
pod 'NEChatUIKit/FCS_Special', '9.7.3'
pod 'NETeamUIKit/FCS_Special', '9.7.3'
# 扩展库-地理位置组件
pod 'NEMapKit/FCS_Special', '9.7.3'
# 扩展库-呼叫组件
pod 'NERtcCallKit/FCS_Special', '2.2.0'
pod 'NERtcCallUIKit/FCS_Special', '2.2.0'
# 扩展库,依次为 RTC 音视频基础组件、RTC 音视频神经网络组件(使用背景虚化功能需要集成)、RTC 音视频背景分割组件(使用背景虚化功能需要集成)
pod 'NERtcSDK/RtcBasic', '5.5.2'
pod 'NERtcSDK/Nenn'
pod 'NERtcSDK/Segment'
end
::::::
- 执行以下命令导入组件。
pod install
- 各组件相互独立,添加或删除均不影响项目编译。
- 暂不支持 bitcode。
- 上述示例代码中的 9.7.3 为版本号,仅用于示例。建议使用最新版本。
如果出现类似“版本不存在”的报错,可执行
pod update
命令,然后双击.xcworkspace
文件,启动项目即可。 - 如果需要在 Objective-C 项目中导入组件,头文件引用请参考以下引用方式。
#import <NEConversationUIKit/NEConversationUIKit-Swift.h> #import <NEContactUIKit/NEContactUIKit-Swift.h> #import <NEChatUIKit/NEChatUIKit-Swift.h> #import <NETeamUIKit/NETeamUIKit-Swift.h> #import <NERtcCallUIKit/NERtcCallUIKit.h> ...
添加本地代码依赖
本节介绍如何通过 Cocoapods 添加本地依赖,将所需的 IM UIKit 源码导入到您的项目。
- 前往云信开源代码仓库,下载开源的 IM UIKit 到本地,然后将源码文件夹拷贝到项目目录。
- 将上述远端仓库依赖的 Podfile 文件中的对应库改为本地依赖,例如将 UI 组件和地图组件改为本地依赖只需更改以下内容(其他组件):
pod 'NEContactUIKit', :path => 'NEContactUIKit/NEContactUIKit.podspec'
pod 'NEConversationUIKit', :path => 'NEConversationUIKit/NEConversationUIKit.podspec'
pod 'NETeamUIKit', :path => 'NETeamUIKit/NETeamUIKit.podspec'
pod 'NEChatUIKit', :path => 'NEChatUIKit/NEChatUIKit.podspec'
pod 'NEMapKit', :path => 'NEMapKit/NEMapKit.podspec'
pod 'NERtcCallUIKit', :path => 'NERtcCallUIKit/NERtcCallUIKit.podspec'
上述内容中的 path
为相对路径,即当对应组件源码文件与 Podfile 文件处于同级目录时,才能通过上述相对路径正确引入组件。
- 执行以下命令导入 IM UIKit 源码。
pod install
-
(可选)处理冗余文件,减少资源引入。
云信 IM UIKit 提供两套风格的 UI 组件库,可任意选择一种使用。确定后,可移除另一套 UI 组件相关文件,以减小包体积。
若确定只集成通用版 UI 组件,则可以删除各 Kit 下的基础版 UI 相关文件。此处以
NEChatUIKit
为例,其他 Kit 组件同理。即可删除
NEChatUIKit
下的NormalChatUIKit.xcassets
和NormalUI
文件。-
NEChatUIKit
引入的资源结构如下://每个 Kit 下包含三分资源文件 NEChatUIKit └── NEBaseChatUIKit.xcassets // 公共资源文件 └── NormalChatUIKit.xcassets //基础版 UI 资源文件 └── FunChatUIKit.xcassets // 通用版 UI 资源文件
-
引入的代码文件中,NormalUI 和 FunUI 文件夹分别用于存放所有与基础版 UI 相关的文件和所有与通用版 UI 相关的文件。
-
后续步骤
导入组件后,需进行初始化。
常见问题排查
pod 冲突报错
-
问题原因
如果导入组件时,只导入了 IM UIKit 的 UI 组件,在特殊情况下可能出现库版本不一致导致的报错(UI 组件版本与其内部依赖的基础 kit 库的版本不一致)。
以下图所示的报错为例,导入的 IM UIKit 的 UI 组件版本为 v9.3.0,但导入的基础 Kit 库版本为 v9.3.2。这会导致基础库用到日志库(
alog
)和 UI 组件用到的alog
不一致,进而导致 pod 冲突报错。 -
处理建议:
导入 UI 组件时,同时也指定当前版本的基础 Kit 库。
以导入 v9.7.3 的 UI 组件为例:
#基础kit库 pod 'NECommonUIKit', '9.7.1' pod 'NECommonKit', '9.6.6' pod 'NECoreIMKit', '9.6.7' pod 'NECoreKit', '9.6.6'