# AleafPlugins
**Repository Path**: tyousan_admin/AleafPlugins
## Basic Information
- **Project Name**: AleafPlugins
- **Description**: leaf的iOS配套扩展插件
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2023-08-23
- **Last Updated**: 2024-06-05
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# AleafPlugins
#### 介绍
leaf的iOS配套扩展插件(含用友和DCloud平台配套插件使用说明)
## 重要 
苹果上架遇见4.3问题,可能需要你自己制作appex扩展文件,防止上架审核4.3问题。
1.用xcode创建一个App工程。
2.添加target,选择Network Extension。
3.导入ALeafKit.framework。
4.修改PacketTunnelProvider.swift内容为。
```js
import NetworkExtension
import ALeafKit
class PacketTunnelProvider: ALeafTunnelProvider {
    override init() {
        super.init()
    }
    override func startTunnel(options: [String : NSObject]?, completionHandler: @escaping (Error?) -> Void) {
        super.startTunnel(options: options, completionHandler: completionHandler)
    }
    override func stopTunnel(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) {
        super.stopTunnel(with: reason, completionHandler: completionHandler)
    }
    override func handleAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)?) {
        super.handleAppMessage(messageData, completionHandler: completionHandler)
    }
    override func sleep(completionHandler: @escaping () -> Void) {
        super.sleep(completionHandler: completionHandler)
    }
    override func wake() {
        super.wake()
    }
}
```
5.运行程序,获取PacketTunnel.appex。
6.删除PacketTunnel.appex内部的embedded.mobileprovision文件。
7.将PacketTunnel.appex内部的Frameworks目录下的ALeafKit.framework复制到XF-AleafPlugins/ios/目录下。
8.然后删除PacketTunnel.appex内部的Frameworks目录。
9.删除PacketTunnel.appex内部的Info.plist中Bundle identifier。
10.将ALeafKit.framework内部的cacert.pem文件copy到PacketTunnel.appex内部
11.替换XF-AleafPlugins里面的PacketTunnel.appex文件。
12.你自己的appex扩展就做好了。
## ** 一、用友 AleafPlugins配置说明 ** 
#### 主工程 Info.plist 需要配置
1. Info.plist中新增groupName值:如group.主工程ID。
```js
groupName
group.主工程ID
NSSystemExtensionUsageDescription
VPN权限申请描述信息
```
#### 主工程 UZApp.entitlements 需要配置
```js
	com.apple.developer.networking.networkextension
	
		packet-tunnel-provider
	
	com.apple.security.application-groups
	
		group.com.soft.qingyanjiasu
	
```
#### 扩展库 PacketTunnel.appex 
1. appex扩展内部 Info.plist 根据实际情况填写一下内容。
2. Info.plist中新增Bundle identifier值:如:主工程ID.PacketTunnel。
3. Info.plist中新增groupName值:如group.主工程ID。
4. 根据自己实际情况替换appex中的embedded.mobileprovision证书
```js
CFBundleIdentifier
主工程ID.PacketTunnel
groupName
group.主工程ID
```
## ** 二、Dcloud XF-AleafPlugins配置说明 ** 
1. 修改ios-extension.json里面配置信息:
```js
{
	"PacketTunnel.appex": {
		"identifier":"",//必须修改为自己的扩展id值
		"profile":"ios-PacketTunnelExt.mobileprovision",//可以不修改
		"plists":{
			"groupName":"",//App Group数据共享ID
		},
		"entitlements":{
			"com.apple.developer.networking.networkextension":["packet-tunnel-provider"],
			"com.apple.security.application-groups":[""]//App Group数据共享ID
		}
	}
}
```
2. 替换ios-PacketTunnelExt.mobileprovision描述文件为你自己的扩展描述文件(文件名称请不要变).
3. 修改package.json里面com.apple.security.application-groups信息为自己的值,同时修改NSSystemExtensionUsageDescription权限的描述信息。

## ** 三、离线打包 ** 
#### 主工程和扩展工程配置如图

#### 主工程单独引入扩展 PacketTunnel.appex 如图


同时在Info.Plist中填写权限NSSystemExtensionUsageDescription的描述信息。