Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
C
CodePush-iOS
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge Requests 0
    • Merge Requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Incidents
    • Environments
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Demo
  • CodePush-iOS
  • Wiki
  • Home

Last edited by John Huang Oct 31, 2019
Page history

Home

概述

CodePush(后面有些地方简称CP) 本wiki文档记录了如何通过CP对Cordova的iOS项目进行热更新。 本文档是对另一个文档CodePush研究记录的进一步整理。前者主要记录详细的研究过程,也记录了研究过程中的一些错误尝试,内容相对混乱。本文档记录的是具体的整理过后的操作流程。

关于Code Push的相关概念以及常用命令,可以参考 Code Push概念及常用命令

环境信息

本文档记录了CodePush-iOS项目的基本创建步骤,而项目是在特定的环境下运作的,下面是关于项目的环境的一些基本信息。

设备:MacBook 12-inch 2017
OS:macOS 10.15 Catalina

本记录中安装的工具版本: code-push: 2.1.9

安装CP CLI工具

安装CP CLI工具。安装该工具以后可以通过code-push命令进行热更新管理。

npm install -g code-push-cli

如果已经拥有AppCenter账号,可以通过下面命令登录账号。

code-push login

命令会在浏览器打开网页进行登录。登录成功以后会返回一个token,在终端输入该token完成终端的登录。

如果还没有AppCenter账号,则可以通过下面命令进行注册。

code-push register

注册成功以后同样会生成token,把token输入终端以完成注册及登录。

创建Cordova项目

创建项目

cordova create CodePush-iOS com.easternphoenix.CodePush CodePush-iOS

添加iOS平台

cordova platform add ios

至此CodePush-iOS项目的iOS平台创建完毕。可以执行下面命令用Xcode打开。

open -a xcode platforms/ios/CodePush-iOS.xcworkspace

用Xcode运行一下项目,确保项目可以正常运行即可。

安装配置CP热更新

在AppCenter注册App

code-push app add CodePush-iOS ios cordova

上面命令中, CodePush-iOS为在AppCenter注册的App的名称; ios cordova指定App的开发平台,这里为iOS和cordova。可能的选项还有android,web,react-native, windows等等。

在注册成功以后,CLI工具会打印出App的开发开发和发布的key,类似下面这样。 C6EAE9C6-0AB2-4B33-AAEE-AB30E8B52350

向项目添加CP插件

cordova plugin add cordova-plugin-code-push@latest

配置config.xml

open -a xcode ./config.xml

把下面内容添加到config.xml的iOS平台的配置中:

<platform name="ios">
    <preference name="CodePushDeploymentKey" value="FLSdRNnDltq7oepp55e-zS4jN-LS5d************" />
    ...
</platform>

上面用的是Staging的key,如果真正发布则需要填入Production的key>


在index.js添加热更新代码

open -a xcode ./www/js/index.js

CP有若干管理热更新的API,最简单是调用codePush.sync()方法进行热更新。我把这段代码放置在deviceready事件当中,在App打开的时候出发热更新。

    onDeviceReady: function() {
        this.receivedEvent('deviceready');
        console.log('=========codePush.sync()');  //打印一下确认被调用
        codePush.sync();  //添加这段代码触发热更新
    }

重新build项目

cordova build ios

这里再用Xcode运行一下,看CP有没有正常运行。如果CP正常运行的话,控制台应该会打印类似下面这样的信息:

2019-10-17 14:35:15.975783+0800 CodePush-iOS[968:213495] Received Event: deviceready
2019-10-17 14:35:15.975959+0800 CodePush-iOS[968:213495] =========codePush.sync()
2019-10-17 14:35:16.221349+0800 CodePush-iOS[968:213495] [CodePush] Checking for update.
2019-10-17 14:35:17.729972+0800 CodePush-iOS[968:213495] [CodePush] App is up to date.

推送热更新

在iOS的设备上运行一个CodePush-iOS。后面将修改代码并推送更新到已安装过App的设备上。

使用设备是因为后面修改代码后将会在模拟器预览,在预览的过程中新版本就已经在模拟器上运行使得无法观测到热更新的过程。

如果以模拟器作为测试对象,则在修改代码以后应以浏览器进行预览观察。


修改index.xml的代码

<html>
    ...
    <body>
        <div class="app">
            <h1>Apache Cordova [New Version]</h1>
            ...  
        </div>
        ...
    </body>
</html>

修改config.xml的App版本(vsersion):

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.easternphoenix.CodePush" version="1.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    ...
</widget>

刷新代码,并(在模拟器或者浏览器)预览一下

cordova prepare

查询更新记录(应该没有任何记录):

code-push deployment history CodePush-iOS Staging

推送更新

code-push release-cordova CodePush-iOS ios -d Staging -t "^1.0.0" -m

备忘

在本项目测试过程中出现过一些与基本流程无关的报错。这些流程主要与环境、平台、软件相关。这个部分记录了其中一些,以及它的解决,以防在复制测试的时候有同样的情况出现。

报错1

Jerry-MacBook:CodePush-iOS jerry$ cordova build ios
CordovaError: Promise rejected with non-error: "xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance\n"
    at /usr/local/lib/node_modules/cordova/bin/cordova:29:15
    at processTicksAndRejections (internal/process/task_queues.js:93:5)

解决

https://forum.ionicframework.com/t/xcode-select/158410 设置xcode command line tools


报错2

Jerry-MacBook:CodePush-iOS jerry$ cordova build ios
Reading build config file:
CordovaError: Promise rejected with non-error: "ios-deploy was not found. Please download, build and install version 1.9.2 or greater from https://github.com/ios-control/ios-deploy into your path, or do 'npm install -g ios-deploy'"
    at /usr/local/lib/node_modules/cordova/bin/cordova:29:15
    at processTicksAndRejections (internal/process/task_queues.js:93:5)

解决

拔出ios设备再运行命令(ios-deploy,似乎还没支持macOS Catalina)

Clone repository
  • code push概念及常用命令
  • codepush研究记录
  • Home