iosuts.md 5.1 KB
Newer Older
1
# 制作UTS插件
DCloud_iOS_WZT's avatar
DCloud_iOS_WZT 已提交
2 3
> 1. 付费uts插件不支持原生工程接入。
> 2. 如果导出的资源文件不包含 `uni_modules` ,或 `uni_modules` 中的插件均不包含 `app-ios` 目录可以跳过此章节
4 5

## 新建原生插件工程
DCloud_iOS_WZT's avatar
DCloud_iOS_WZT 已提交
6
根据资源文件下的`uni_modules`下的插件列表,新建原生插件工程
7 8 9 10 11 12 13 14 15 16 17
1. 启动`Xcode`,点击`File->New->Project`,选择`Framework`点击`Next`
2. `Product Name`填写规则为:`unimodule`+`插件名称`,其中`-`分割改为驼峰,比如`uni-getbatteryinfo`插件对应的原生工程名应为`unimoduleUniGetbatteryinfo`
3. `Language`选择为`Objective-C`,点击`Next`即可完成创建

## 插件工程环境配置
 `Target -> General -> Minimum Deployments` 选择 `12.0`
 `Target -> Build Settings -> Mach-O Type` 设置为`Dynamic Library`
 `Target -> Build Settings -> Other Linker Flags` 中添加`-ObjC`, 字母o和c大写
 `Target -> Build Settings -> Build Libraries for Distribution` 设置为`YES`
 `Target -> Build Settings -> Framework Search Paths` 中添加SDK的Libs目录(操作方法:双击展开`Framework Search Paths``SDK/Libs`文件夹拖入即可)

DCloud_iOS_WZT's avatar
DCloud_iOS_WZT 已提交
18
`插件工程`中新建`uts-config.json`文件,然后将SDK中`SDK/ExtApiSrc/UTSOC.h`以及`SDK/ExtApiSrc/UTSOC.mm`添加到`插件工程`
19

DCloud_iOS_WZT's avatar
DCloud_iOS_WZT 已提交
20 21 22 23 24
## 配置资源文件
1. 将以下源文件(`SDK/ExtApiSrc 目录下`)、依赖库(`SDK/Libs 目录下`)添加到`插件工程`中,并将依赖库均设置为`Do Not Embed`
    | 源文件 | 依赖库 | 资源文件 |
    |---|---|---|
    | UTSOC.h、UTSOC.mm | DCloudUniappRuntime.xcframework、DCloudUTSExtAPI.xcframework、DCloudUTSFoundation.xcframework| uts-config.json |
25 26 27

> DCloudUTSExtAPI.xcframework的制作详见[集成内置模块](../modules/ios/modules.md)

DCloud_iOS_WZT's avatar
DCloud_iOS_WZT 已提交
28 29 30 31 32 33 34 35 36 37 38

2. 将导出的资源文件中`uni_modules`目录下的插件资源,按以下列表中的配置方式分别在`主工程``插件工程`添加依赖资源
    | 目录名/文件名 | 	用途 | 配置 |
    |---|---|---|
    | Frameworks | 插件依赖的三方库(framework/xcframework) | 将目录下的依赖库添加到`插件工程`中 |
    | Libs | 插件依赖的三方库(.a) | 将目录下的依赖库添加到`插件工程`中 |
    | src | 插件源代码 | 将目录下的源代码添加到`插件工程`中 |
    | Resources | 插件需要引用的资源文件存放目录 | 将目录下的资源文件添加到`主工程`中 |
    | Info.plist | 需要添加到原生主工程`Info.plist`中的配置文件 | 将该文件配置添加到`主工程``Info.plist`中,注意去重 |
    | UTS.entitlements | 需要添加到原生主工程 `entitlements` 文件中的配置文件 | 根据该文件内容,在主工程中添加对应的`Capability` |
    | config.json | 插件依赖的`系统库``cocoapods三方库`以及一些需要添加到`主工程Info.plist`文件内的配置信息 | 详见下表 |
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

### config.json配置

| 参数 | 	用途 | 配置 |
|---|---|---|
| frameworks | 插件依赖的系统库 | 在`主工程`中搜索并添加该列表中的系统依赖库 |
| deploymentTarget | 插件最低支持的iOS版本 | 在`插件工程``Target -> General -> Minimum Deployments`设置(若大于主工程设置的最低iOS版本需要同步修改主工程的最低支持) |
| dependencies-pods | 依赖的pod库 | 将其添加到`插件工程``Podfile`文件中并执行`pod install` |
| plists | 需要添加到原生主工程`Info.plist`中的配置文件 | 将字段配置添加到`主工程``Info.plist`中 |
| hooksClass | 用于uts插件应用程序生命周期函数监听 | 在`插件工程`中找到上面创建的`uts-config.json`文件,将该配置内容添加到`hooksClasses`节点下 |
| provider | 组件的注册信息 | 在`插件工程`中找到上面创建的`uts-config.json`文件,将该配置内容添加到`providers`节点下 |
| components | 组件的注册信息 | 在`插件工程`中找到上面创建的`uts-config.json`文件,将该配置内容添加到`components`节点下 |

`uts-config.json`配置示例图
![](https://web-ext-storage.dcloud.net.cn/native/doc/iOS/utsconfig.png)


56
### 隐私清单
DCloud_iOS_WZT's avatar
DCloud_iOS_WZT 已提交
57
如果HBuilderX导出的资源文件中包含`PrivacyInfo.xcprivacy`文件,需要将文件内容添加到`插件工程`的同名文件中,注意去重
58

59 60 61 62 63 64 65 66 67 68 69
## 编译导出xcframework
选择构建目标(Any iOS Device/Any iOS Simulator Device),在菜单栏中,选择`Product -> Build`(或使用快捷键`Command + B`),分别编译出真机以及模拟器的Framework文件。
在菜单栏中,选择`Product -> Show Build Floder in Finder` 获取编译产物所在路径。
使用xcodebuild命令行创建xcframework
```
xcodebuild -create-xcframework -framework 真机路径/unimoduleUniGetbatteryinfo.framework -framework 模拟器路径/unimoduleUniGetbatteryinfo.framework -output 导出路径/unimoduleUniGetbatteryinfo.xcframework
```
导出成功后,将 `unimoduleUniGetbatteryinfo.xcframework` 添加到主工程,并设置为 `Embed && Sign` 

> 编译模拟器注意事项
> `Apple芯片`的设备编译模拟器需要在菜单栏中点击 `Product -> Destination -> Show All Run Destinations` ,然后选择 `Rosetta模拟器` 编译