# 通过 CI 打包(miniprogram-ci)

开发者可通过 miniprogram-ci 构建 APK 和 IPA，开发者需要先学习[miniprogram-ci](https://www.npmjs.com/package/miniprogram-ci) 使用。

## 1、安装 

`npm install miniprogram-ci@alpha`

## 2、构建 APK

### 示例代码

``` javascript

const ci = require('miniprogram-ci')
;(async () => {
  const project = new ci.Project({
    appid: 'wxsomeappid',
    type: 'miniProgram',
    projectPath: 'the/project/path',
    privateKeyPath: 'the/path/to/privatekey',
    ignores: ['node_modules/**/*'],
  })
  const buildResult = await ci.buildApk({
    project,
    keyAlias: 'keyAlias',
    keyPass: 'keyPass',
    keyStore: 'the/path/to/keystore',
    storePass: 'storePass',
    output: '/the/path/to/output',
    desc: 'build apk from ci',
  })
  console.log(uploadResult)
})()

```

### 参数

#### 请求参数

- 同时支持传入 ci.uploaod 的参数

| 键               | 类型     | 必填 | 说明                                    |
| ---------------- | -------- | ---- | ------------------------------------- |
| project          | IProject | 是   | #项目对象                              |
| keyStore         | string   | 是   | 证书文件绝对路径                            |
| keyPass          | string   | 是   | 证书密码                              |
| storePass        | string   | 是   | 证书文件密码                             |
| keyAlias         | string   | 是   | 证书别名                        |
| output           | string   | 是   | 构建产物的保存路径，需要为系统绝对路径 |
| useAab           | boolean  | 否   | 默认 false |
| desc             | string   | 否   | 版本描述 |
| isUploadResourceBundle  | boolean  | 否   | 是否上传资源包 |
| resourceBundleVersion   | string   | 否   | 资源包版本号 |
| resourceBundleDesc      | string   | 否   | 资源包项目备注 |
| disableCache      | boolean   | 否   | 是否清除构建缓存 |

#### 返回参数

| 键         | 类型     | 必填  | 说明                    |
| ----------| -------- | ---- | ----------------------- |
| errmsg    | string   |      |    构建信息   |
| success   | boolean  |   |  构建是否成功 |

## 3、构建 IPA

支持本地构建与远程构建。本地构建 IPA 仅支持在 macOS 上使用 codesign 进行签名，因此开发者需要确保 keychains 中包含自己的证书信息。Windows 可以使用远程构建。

### 示例代码

``` javascript

const ci = require('miniprogram-ci')
;(async () => {
  const project = new ci.Project({
    appid: 'wxsomeappid',
    type: 'miniProgram',
    projectPath: 'the/project/path',
    privateKeyPath: 'the/path/to/privatekey',
    ignores: ['node_modules/**/*'],
  })
  const buildResult = await ci.buildIpa({
    project,
    output: '/the/path/to/output', // 构建产物的保存路径，需要为系统绝对路径
    profilePath: '/the/path/to/profile', // profile 文件地址，文件格式为 mobileprovision，相对项目根路径的相对路径
    certificateName: 'Apple Develop', // 签名证书名
    tpnsProfilePath: '/the/path/to/tnpsprofile', // tpnsProfile 文件路径，相对项目根路径的相对路径
  })
  console.log(uploadResult)
})()

```

### 参数
#### 参数
同时支持传入 ci.uploaod 的参数。

| 键               | 类型     | 必填 | 说明                                    |
| ---------------- | -------- | ---- | ------------------------------------- |
| project          | IProject | 是   | #项目对象                              |
| output           | string   | 是   | 构建产物的保存路径，需要为系统绝对路径 |
| isDistribute     | string   | 否   | 是否使用分发证书                            |
| profilePath      | string   | 是   | profile 文件地址，文件格式为 mobileprovision，相对项目根路径的相对路径|
| certificateName  | string   | 是   | 证书别名                        |
| tpnsProfilePath  | string   | 否   | tpnsProfile 文件路径，相对项目根路径的相对路径 |
| p12Path          | string   | 否   | p12 文件路径，文件格式为 p12，相对项目根路径的相对路径。使用远程构建时必填 |
| p12Password      | string   | 否   | p12 密码。使用远程构建时必填 |
| desc             | string   | 否   | 版本描述 |
| isUploadResourceBundle  | boolean  | 否   | 是否上传资源包 |
| resourceBundleVersion   | string   | 否   | 资源包版本号 |
| resourceBundleDesc      | string   | 否   | 资源包项目备注 |
| disableCache      | boolean   | 否  | 是否清除构建缓存 |
| isRemoteBuild     | boolean   | 否  | 是否使用远程构建 |

#### 返回

| 键         | 类型     | 必填  | 说明                    |
| ----------| -------- | ---- | ----------------------- |
| errmsg    | string   |      |    构建信息   |
| success   | boolean  |   |  构建是否成功 |

## 4、上传资源包

### 示例代码

``` javascript

const ci = require('miniprogram-ci')
;(async () => {
  const project = new ci.Project({
    appid: 'wxsomeappid',
    type: 'miniProgram',
    projectPath: 'the/project/path',
    privateKeyPath: 'the/path/to/privatekey',
    ignores: ['node_modules/**/*'],
  })
  const uploadResult = await ci.miniappCloudUpload({
    project,
    version: '0.1.24',
    androidPlatform: false,
    setting: {
      es6: true,
    },
  })
  console.log(uploadResult)
})()

```

### 参数

#### 参数
同时支持传入 ci.uploaod 的参数。

| 键               | 类型     | 必填 | 说明                                    |
| ---------------- | -------- | ---- | ------------------------------------- |
| project          | IProject | 是   | #项目对象                               |
| version          | string   | 是   | 版本号    |
| desc             | string   | 否   | 版本描述  |
| iOSPlatform      | boolean  | 否   | 适用平台 iOS，默认为  true      |
| androidPlatform  | boolean  | 否   | 适用平台 Android，默认为  true  |

#### 返回

| 键         | 类型     | 必填  | 说明                    |
| ----------| -------- | ---- | ----------------------- |
| errmsg    | string   |      |    构建信息   |
| success   | boolean  |      |  构建是否成功 |
