组件导入

更新时间: 2024/04/19 16:37:28

IM UIKit (iOS) 采用 Cocoapods 进行构建,您可以采用添加远端仓库依赖或者本地代码依赖的方式(同一个组件库只能选择一种依赖方式),将所需组件快速导入到您的项目中。

  • 添加远端仓库依赖:适用于采用 IM UIKit 默认界面的集成。
  • 添加本地代码依赖:适用于通过 IM UIKit 进行界面自定义的集成。

前提条件

已准备如下开发环境/工具:

  • iOS 10.0 及以上版本
  • Xcode 14

导入组件

您可通过添加远端仓库依赖或者添加本地代码依赖,导入组件。

添加远端仓库依赖

本节介绍如何通过 Cocoapods 添加远程依赖,将您业务所需的的 UI 组件导入到您的项目,进行项目构建。

  1. 创建 Podfile 文件,并在 Podfile 文件中引入 Ui 组件。

    引入 UI 组件时,需要指定相同版本的基础 Kit 库引入,否则可能导致后续出现报错。具体可参见下文的常见问题排查

IM UIKit 底层依赖 NIM SDK。

  • 若引入 UI 组件时不指定 NIM SDK 版本,那么将默认引入当前兼容的最新版本(参考更新日志)。
  • 若引入 UI 组件时需要使用指定 NIM SDK 的版本,那么需要在引入时填写正确的版本号,具体请参考以下示例代码。
不指定 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 'NECoreKit', '9.6.5'
pod 'NECoreIMKit', '9.6.5'
pod 'NEChatKit', '9.6.5'
pod 'NECommonKit', '9.6.4'
pod 'NECommonUIKit', '9.6.5'

# UI 组件,依次为通讯录组件会话列表组件会话(聊天)组件群相关设置组件
pod 'NEContactUIKit', '9.6.5'      
pod 'NEConversationUIKit', '9.6.5' 
pod 'NEChatUIKit', '9.6.5'         
pod 'NETeamUIKit', '9.6.5'        

# 扩展库-地理位置组件
pod 'NEMapKit', '9.6.5'         

# 扩展库-呼叫组件
pod 'NIMSDK_LITE','9.14.0'
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
指定 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!

# 指定 NIM SDK 版本,以9.11.0 为例
pod 'NIMSDK_LITE','9.11.0'

# 基础 Kit 库
pod 'NECoreKit', '9.6.5'
pod 'NECoreIMKit/NOS_Special', '9.6.5'
pod 'NEChatKit/NOS_Special', '9.6.5'
pod 'NECommonKit', '9.6.4'
pod 'NECommonUIKit', '9.6.5'

# UI 组件,依次为通讯录组件会话列表组件会话(聊天)组件群相关设置组件
pod 'NEContactUIKit/NOS_Special', '9.6.5'      
pod 'NEConversationUIKit/NOS_Special', '9.6.5' 
pod 'NEChatUIKit/NOS_Special', '9.6.5'         
pod 'NETeamUIKit/NOS_Special', '9.6.5'         

# 扩展库-地理位置组件
pod 'NEMapKit/NOS_Special', '9.6.5'         

# 扩展库-呼叫组件
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
(海外数据中心)不指定 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 'NECoreKit', '9.6.5'
pod 'NECoreIMKit/FCS', '9.6.5'
pod 'NEChatKit/FCS', '9.6.5'
pod 'NECommonKit', '9.6.4'
pod 'NECommonUIKit', '9.6.5'

# UI 组件,依次为通讯录组件会话列表组件会话(聊天)组件群相关设置组件
pod 'NEContactUIKit/FCS', '9.6.5'      
pod 'NEConversationUIKit/FCS', '9.6.5' 
pod 'NEChatUIKit/FCS', '9.6.5'         
pod 'NETeamUIKit/FCS', '9.6.5'         

# 扩展库-地理位置组件
pod 'NEMapKit/FCS', '9.6.5'         

# 扩展库-呼叫组件
pod 'NIMSDK_LITE','9.14.0'
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
(海外数据中心)指定 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!

# 指定 NIM SDK 版本,以9.11.0 为例
pod 'NIMSDK_LITE','9.11.0'

# 基础 Kit 库
pod 'NECoreKit', '9.6.5'
pod 'NECoreIMKit/FCS_Special', '9.6.5'
pod 'NEChatKit/FCS_Special', '9.6.5'
pod 'NECommonKit', '9.6.4'
pod 'NECommonUIKit', '9.6.5'

# UI 组件,依次为通讯录组件会话列表组件会话(聊天)组件群相关设置组件
pod 'NEContactUIKit/FCS_Special', '9.6.5'      
pod 'NEConversationUIKit/FCS_Special', '9.6.5' 
pod 'NEChatUIKit/FCS_Special', '9.6.5'         
pod 'NETeamUIKit/FCS_Special', '9.6.5'         

# 扩展库-地理位置组件
pod 'NEMapKit/FCS_Special', '9.6.5'         

# 扩展库-呼叫组件
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
  1. 执行以下命令导入组件。
pod install
  • 各组件相互独立,添加或删除均不影响项目编译。
  • 暂不支持 bitcode。
  • 上述示例代码中的 9.6.5 为版本号,仅用于示例。建议使用最新版本。 如果出现类似“版本不存在”的报错,可执行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 源码导入到您的项目。

  1. 前往云信开源代码仓库,下载开源的 IM UIKit 到本地,然后将源码文件夹拷贝到项目目录。
  2. 将上述远端仓库依赖的 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 文件处于同级目录时,才能通过上述相对路径正确引入组件。

  1. 执行以下命令导入 IM UIKit 源码。
pod install
  1. (可选)处理冗余文件,减少资源引入。

    云信 IM UIKit 提供两套风格的 UI 组件库,可任意选择一种使用。确定后,可移除另一套 UI 组件相关文件,以减小包体积。

    若确定只集成通用版 UI 组件,则可以删除各 Kit 下的基础版 UI 相关文件。此处以 NEChatUIKit 为例,其他 Kit 组件同理。

    即可删除 NEChatUIKit 下的 NormalChatUIKit.xcassetsNormalUI 文件。

    • NEChatUIKit 引入的资源结构如下:

      //每个 Kit 下包含三分资源文件
      NEChatUIKit
      └── NEBaseChatUIKit.xcassets // 公共资源文件
      └── NormalChatUIKit.xcassets //基础版 UI 资源文件
      └── FunChatUIKit.xcassets // 通用版 UI 资源文件
      
    • 引入的代码文件中,NormalUI 和 FunUI 文件夹分别用于存放所有与基础版 UI 相关的文件和所有与通用版 UI 相关的文件。

    源码结构.png

后续步骤

导入组件后,需进行初始化

常见问题排查

pod 冲突报错

  • 问题原因

    如果导入组件时,只导入了 IM UIKit 的 UI 组件,在特殊情况下可能出现库版本不一致导致的报错(UI 组件版本与其内部依赖的基础 kit 库的版本不一致)。

    以下图所示的报错为例,导入的 IM UIKit 的 UI 组件版本为 v9.3.0,但导入的基础 Kit 库版本为 v9.3.2。这会导致基础库用到日志库(alog)和 UI 组件用到的 alog 不一致,进而导致 pod 冲突报错。

    POPO20230216-173017.png

  • 处理建议

    导入 UI 组件时,同时也指定当前版本的基础 Kit 库。

    以导入 v9.6.5 的 UI 组件为例:

    #基础kit库
    pod 'NECommonUIKit', '9.6.5'
    pod 'NECommonKit', '9.6.4'
    pod 'NECoreIMKit', '9.6.5'
    pod 'NECoreKit', '9.6.5'
    
此文档是否对你有帮助?
有帮助
去反馈
  • 前提条件
  • 导入组件
  • 添加远端仓库依赖
  • 添加本地代码依赖
  • 后续步骤
  • 常见问题排查
  • pod 冲突报错