iOS端下uniAPP原生插件是怎样打包的?

1. 前言

在开发和打包uniApp应用时,我们可能会遇到需要在uniApp中使用原生插件的情况。这时候,我们需要将原生插件打包成uniApp可使用的格式,例如iOS端下的插件需要打包成.framework文件。本文将介绍iOS端下uniApp原生插件如何打包的详细过程。

2. 准备工作

在打包iOS端下的uniApp原生插件之前,我们需要先做好一些准备工作。

2.1 编写原生插件代码

首先,我们需要编写原生插件的代码。对于iOS端的原生插件,我们需要熟悉Objective-C或Swift。

2.2 安装Xcode

接下来,我们需要安装Xcode,Xcode是苹果官方提供的开发工具,用于编写iOS应用。我们可以从App Store中免费下载安装。

2.3 创建原生插件项目

在Xcode中,我们需要创建一个新的原生插件项目。在创建项目时,我们需要选择生成一个“Framework”类型的target。

3. 配置原生插件项目

在创建好原生插件项目之后,我们需要进行一些配置,以确保插件能够顺利地打包为.framework文件。

3.1 配置Build Settings

在Xcode中,我们需要设置一些Build Settings,以确保生成的.framework文件可以正常地被uniApp使用。我们需要在 “Build Settings” 页面中按照以下步骤进行设置:

1. 设置“Build Active Architecture Only”为“NO”;

2. 设置“Mach-O Type”为“static library”;

3.2 配置Build Phases

在Xcode中,我们还需要添加一些Build Phases,以确保生成的.framework文件能够包含所需的符号表和库文件。我们需要在 “Build Phases” 页面中按照以下步骤进行设置:

1. 添加“Copy Files”;

2. 设置“Destination”为“Frameworks”;

3. 将所需的库文件拖入“Copy Files”中;

4. 添加“Run Script”;

5. 在“Run Script”中添加以下代码:

 

# Type a script or drag a script file from your workspace to insert its path.

# Skip if not building for iPhone, iPad, or iPod Touch

if [ "${PLATFORM_NAME}" == "iphoneos" ]; then

# Clear out the destination directory

rm -rf "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/$(PRODUCT_NAME).framework"

# Ensure the destination directory exists

mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"

# Copy the framework structure (from iphoneos build) to the final destination directory

cp -a "${BUILD_DIR}/${CONFIGURATION}-iphoneos/$(PRODUCT_NAME).framework" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/$(PRODUCT_NAME).framework"

# Combine all the .a files into one fat binary

lipo -create -output "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/$(PRODUCT_NAME).framework/$(PRODUCT_NAME)" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/$(PRODUCT_NAME).framework/$(PRODUCT_NAME)" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/$(PRODUCT_NAME).framework/$(PRODUCT_NAME)"

# If needed, replace references to any .a files with the name of the fat binary in the project

sed -i '' 's/\/${CONFIGURATION}-\$(CURRENT_ARCH)\//\//g' "${TARGET_BUILD_DIR}/${WRAPPER_NAME}/Info.plist"

fi

上述脚本的作用是将生成的.framework文件合并为一个fat binary。

4. 打包原生插件

完成了以上的配置后,我们就可以打包原生插件了。我们需要按照以下步骤进行操作:

1. 在Xcode中,选择对应的target,点击“Product”菜单中的“Archive”选项;

2. 等待打包完成后,点击“Distribute App”按钮;

3. 选择“Copy App Frameworks”选项;

4. 选择输出目录,点击“Export”按钮。

打包完成后,我们就得到了一个.framework文件,可以将其集成到uniApp项目中了。

5. 集成原生插件

在uniApp项目中,我们可以通过如下步骤集成原生插件:

1. 将生成的.framework文件集成到uniApp项目中;

2. 在uniApp项目中编写JS代码,调用原生插件。

例如,我们可以在uniApp项目的manifest.json中添加如下配置:

 

{

"app-plus": {

"plugins": {

"plugin-sample": {

"version": "1.0.0",

"framework": "plugin-sample.framework",

"provider": "xx公司"

}

}

}

}

上述配置中,我们指定了原生插件的名称和版本号,以及.framework文件的路径。

在JavaScript代码中,我们可以通过如下方式调用原生插件:

 

var plugin = uni.requireNativePlugin('plugin-sample');

plugin.callNativeMethod({

name: 'nativeMethod',

data: {

key1: 'value1',

key2: 'value2'

},

success: function(res) {

console.log(res);

},

fail: function(err) {

console.log(err);

}

});

上述代码中,我们使用requireNativePlugin函数获取原生插件的对象,并调用其中的方法。

6. 总结

本文介绍了iOS端下uniApp原生插件的打包过程,包括准备工作、配置原生插件项目、打包原生插件、集成原生插件等步骤。希望本文能够对您有所帮助。