前行者007
前行者007
  • 发布:2020-08-19 18:00
  • 更新:2020-08-20 12:15
  • 阅读:901

2.6.16 采用iOS离线打包后,iOS热更报错(已经找到原因,不是官方离线打包引发的问题)

分类:uni-app

2.6.16采用离线打包后,iOS热更,plus.runtime.install(plus.io.convertLocalFileSystemURL(d.filename), 执行,报错:

进入title: '安装失败-01' 的分支了(代码在文章末)。

这是error信息

{  

    "code":-9999,  

    "message":"指定的位置未找到安装包,http://ask.dcloud.net.cn/article/282"  

}

请问有同款问题么?

代码如下:

var dtask = plus.downloader.createDownload(this.context.fileUrl, {},(d, status) =>{  
                uni.showToast({  
                    title: '下载完成',  
                    mask: false,  
                    duration:1000  
                });  
                if(status == 200 ){  
                    plus.runtime.install(plus.io.convertLocalFileSystemURL(d.filename), {  
                        force:true,  
                        },function(){  
                            console.log('install success...');  
                            plus.runtime.restart();  
                        }, function(error) {  
                            uni.showToast({  
                                title: '安装失败-01',  
                                mask: false,  
                                duration: 1500  
                            });  
                    })  
                }else{  
                    uni.showToast({  
                        title: '更新失败-02',  
                        mask: false,  
                        duration: 1500  
                    });  
                }  
            })

其他说明:云打包,iOS没问题。业务代码没变动。只是iOS的打包换成离线打包。HBuilderX 2.6.16版本。

2020-08-19 18:00 负责人:无 分享
已邀请:
前行者007

前行者007 (作者) - 写代码是不可能写一辈子的,早日上岸吧!

这是下载文件成功后的打印日志:

{  
    "id":"dt241597830246408",  
    "url":"http://******hangzhou.aliyuncs.com/app/upfile/2020/0818/15-1597739296.wgt",  
    "downloadedSize":15617698,  
    "totalSize":15617698,  
    "options":{  

    },  
    "filename":"_downloads/15-1597739296.wgt",  
    "method":"GET",  
    "timeout":120,  
    "retry":3,  
    "retryInterval":30,  
    "priority":1,  
    "eventHandlers":{  
        "statechanged":{  
            "type":"statechanged",  
            "handles":[  
                null  
            ],  
            "capture":false  
        }  
    },  
    "data":null,  
    "__requestHeaders__":{  

    },  
    "__responseHeaders__":{  
        "Accept-Ranges":"bytes",  
        "Connection":"keep-alive",  
        "Content-Length":"15617698",  
        "Content-MD5":"4LunrTfGSqDoQGi+gwXTxg==",  
        "Content-Type":"application/octet-stream",  
        "Date":"Wed, 19 Aug 2020 09:44:06 GMT",  
        "Etag":""E0BBA7AD37C64AA0E84068BE8305D3C6"",  
        "Last-Modified":"Tue, 18 Aug 2020 08:28:17 GMT",  
        "Server":"AliyunOSS",  
        "x-oss-hash-crc64ecma":"10494732588484386780",  
        "x-oss-object-type":"Normal",  
        "x-oss-request-id":"5F3CF4664CE4833730C6D496",  
        "x-oss-server-time":"22",  
        "x-oss-storage-class":"Standard"  
    },  
    "__noParseResponseHeader__":null,  
    "__cacheReponseHeaders__":{  

    },  
    "state":4  
}
前行者007

前行者007 (作者) - 写代码是不可能写一辈子的,早日上岸吧!

下载文件后,业务代码 中runtime指定的文件路径是:
"filename":"_downloads/15-1597739296.wgt",

刚导出了iOS手机上App的文件。能查找到,热更下载后的文件:

AppData/Library/Caches/Pandora/downloads/15-1597739296.wgt

/Users/xxx/Documents/2.6.16/20200820-0941-热更1/com.xxx.xxx 2020-08-20 09:41.30.275.xcappdata/AppData/Library/Caches/Pandora/downloads/15-1597739296.wgt

截图如附件中

前行者007

前行者007 (作者) - 写代码是不可能写一辈子的,早日上岸吧!

找到问题了,不是离线打包的问题,打扰了,各位。

iOS中关于热更新问题失败的原因
这次产品改版,热更要加什么下载进度条啥的。这块另外同事做的,改用plus.downloader.createDownload方法。
因为Android上热更没问题,所以,排查思路没往这上面考虑。

原来的更新下载用的方法为(uni):
uni.downloadFile({
该方法下载后的文件可以runtime执行,热更成功。

现在用的是plus.(因为新的弹窗下载样式)
var dtask = plus.downloader.createDownload(this.context.fileUrl, {},(d, status) =>{
iOS中执行runtime会失败。找不到文件。

该问题目前已经被锁定, 无法添加新回复