我正在尝试构建一个cordova ios应用程序,但没有太多的运气和奇怪的错误.
不推荐使用此版本的Cordova和旧版本的cordova-ios.升级到cordova-ios@4.0.0或更新版本.
错误:您的ios平台没有Api.js
第一个警告说我的cordov-ios版本很旧,这很奇怪,因为这是我的输出:
$ cordova --version
7.0.1
$ cordova platform version ios
Installed platforms:
ios 4.4.0
Available platforms:
android ~6.2.2
blackberry10 ~3.8.0 (deprecated)
browser ~4.1.0
osx ~4.0.1
webos ~3.7.0
Run Code Online (Sandbox Code Playgroud)
所以我显然有必要的最新版本.
然后是Api.js
错误.是什么造成的?
错误:您的ios平台没有Api.js
有任何想法吗?
我有一个离子应用程序,我正在尝试运行它:
ionic cordova build ios
Run Code Online (Sandbox Code Playgroud)
编译成功,但在它成功之前我看到了这些错误:
RegisterExecutionPolicyException /Users/moblizeit/Library/Developer/Xcode/DerivedData/Scan_Buddy-bgqkrrwvotqcxbgakwtfvdcnmkvx/Build/Intermediates.noindex/ArchiveIntermediates/Scan\ Buddy/InstallationBuildProductsLocation/Applications/Scan\ Buddy.app (in target 'Scan Buddy' from project 'Scan Buddy')
cd /Users/moblizeit/code-repo/apps/business-card-scanner/businesscardscanner/platforms/ios
builtin-RegisterExecutionPolicyException /Users/moblizeit/Library/Developer/Xcode/DerivedData/Scan_Buddy-bgqkrrwvotqcxbgakwtfvdcnmkvx/Build/Intermediates.noindex/ArchiveIntermediates/Scan\ Buddy/InstallationBuildProductsLocation/Applications/Scan\ Buddy.app
note: Execution policy exception registration failed and was skipped: Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted" (in target 'Scan Buddy' from project 'Scan Buddy')
Run Code Online (Sandbox Code Playgroud)
关于什么是失败以及如何解决它的任何想法?
我删除了我的ios平台,并试图再次添加它,但现在它说有一个问题,它需要package.json.
如何修复ios平台,使其具有package.json?
使用cordova-ios@4.5.4运行8.1.2(也在8.0中试用)
$ cordova platform add ios
{ Error: npm: Command failed with exit code 1 Error output:
npm ERR! code ENOLOCAL
npm ERR! Could not install from "ios" as it does not contain a package.json file.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/mikenelson/.npm/_logs/2018-10-11T09_47_23_544Z-debug.log
at ChildProcess.whenDone (/usr/local/lib/node_modules/cordova/node_modules/cordova-common/src/superspawn.js:169:23)
at emitTwo (events.js:106:13)
at ChildProcess.emit (events.js:191:7)
at maybeClose (internal/child_process.js:877:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)
stderr: 'npm ERR! code ENOLOCAL\nnpm ERR! Could not install from "ios" as …
Run Code Online (Sandbox Code Playgroud) 我在尝试着:
cordova platform add ios
Run Code Online (Sandbox Code Playgroud)
但是我总是收到以下错误:
Failed to install 'cordova-plugin-whitelist':CordovaError: Plugin doesn't support this project's cordova-ios version. cordova-ios: 3.8.0, failed version requirement: >=4.0.0-dev
at checkEngines (/usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/plugman/install.js:116:29)
at /usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/plugman/install.js:289:16
at _fulfilled (/usr/local/lib/node_modules/cordova/node_modules/q/q.js:787:54)
at self.promiseDispatch.done (/usr/local/lib/node_modules/cordova/node_modules/q/q.js:816:30)
at Promise.promise.promiseDispatch (/usr/local/lib/node_modules/cordova/node_modules/q/q.js:749:13)
at /usr/local/lib/node_modules/cordova/node_modules/q/q.js:557:44
at flush (/usr/local/lib/node_modules/cordova/node_modules/q/q.js:108:17)
at process._tickCallback (node.js:355:11)
Plugin doesn't support this project's cordova-ios version. cordova-ios: 3.8.0, failed version requirement: >=4.0.0-dev
Run Code Online (Sandbox Code Playgroud)
这是我的 package.json
{
"name": "App",
"version": "1.0.0",
"description": "App",
"dependencies": {
"gulp": "^3.5.6",
"gulp-coffee": "^2.1.1",
"gulp-sass": "2.0.0",
"gulp-slim": "",
"gulp-concat": "^2.2.0",
"gulp-minify-css": …
Run Code Online (Sandbox Code Playgroud) 我有一个非常奇怪的错误,在用户与操作系统本身交互之前,设备就绪事件不会在iOS设备中触发,这就是按下前面的按钮,通过向下拖动显示通知中心或者拖动设备设置.
一旦用户开始拖动iOS通知中心,就会启动设备.
像这样简单的东西是行不通的:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width" />
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data:* gap:* tel:* 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'" />
<title></title>
<!-- cordova script (this will be a 404 during development) -->
<script src="cordova.js"></script>
</head>
<body>
<div id="log"></div>
<script type="text/javascript">
var log = document.getElementById("log");
if(window.cordova){
log.innerHTML = "with cordova";
document.addEventListener("deviceready", function onDeviceReady(){
log.innerHTML = "deviceready";
}, false);
}else{
log.innerHTML = "with browser";
}
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 在构建之间(我不确定是什么改变来触发这个),一个应用程序来自iOS中的以下行为.
index.html
,并且有一个iframe,其中包含许多锚点index.html
至:
index.html
,并且有一个iframe,其中包含许多锚点我安装了最新版本cordova-plugin-inappbrowser
(此时为1.3.0),但这似乎并没有干扰任何事情.
我已经验证我仍然可以使用JavaScript index.html
来更改框架内锚点的属性,以及添加事件.
我使用以下CSP:
<meta http-equiv="Content-Security-Policy"
content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval';">
我不确定这是否与它有关.
我尝试了一些iframe沙箱属性试图看到什么棒,但没有一个改变结果.目前它位于:
<iframe id="the-iframe" sandbox="allow-scripts allow-modals allow-popups allow-popups-to-escape-sandbox allow-top-navigation allow-forms allow-same-origin"></iframe>
该src
iframe的动态设置.
我已经打开了一个关于cordova 的错误报告,看看这是否可能是一个bug而不是一个功能.
我有一个用Angular
8构建的现有应用程序,它的代码由一个网站和 2 个用于Android
和 的移动应用程序共享,并IOS
在Cordova
. 它运行良好,但 Apple 宣布他们很快将不再支持使用UIWebView
以下内容构建的应用程序:
自 2020 年 4 月起,App Store 将不再接受使用 UIWebView 的新应用程序和自 2020 年 12 月起使用 UIWebView 的应用程序更新。
所以我被迫将它迁移到WkWebView
. 我知道在Cordova
存储库和其他地方有几个线程讨论可能的迁移计划(例如,请参见此处)。
我还阅读了另一个问题,但它很旧(Angular 的不同版本)并且没有提供任何具体的解决方案。
所以我决定使用cordova-plugin-wkwebview-engine插件,这在我的情况下似乎是最简单的解决方案。
一切都很顺利,直到我在 IOS 模拟器中启动我的应用程序并看到路由不再工作。
我设法通过路由将问题减少到最小的 Angular 应用程序,你可以在这里看到它的工作。
我把重现问题所需的所有步骤都放在了这个存储库中。
以下步骤需要具有node
,npm
并cordova
全局安装:
1. 克隆存储库:git clone https://github.com/sasensi/cordova-ios-angular.git
2. 移动到存储库目录:cd cordova-ios-angular
3. 安装依赖项:npm i
4. 创建cordova …
我正在运行一个离子v1项目,我刚刚将我的cordova-ios更新到4.5.0.我的cordova,节点和离子版本如下
cordova版本6.4.0节点版本6.9.0离子版本1.7.15 cordova-ios 4.5.0
每次我运行这个ionic build ios
,我都会收到一个错误
Error: cordovaProject.projectConfig.getFileResources is not a function
Run Code Online (Sandbox Code Playgroud)
每次我运行这个ionic platform update ios
我得到这个错误
mv: no such file or directory: /{PROJECT_PATH}/platforms/ios/Loanstreet Partners.xcworkspace/xcshareddata/xcschemes/__PROJECT_NAME__.xcscheme
Run Code Online (Sandbox Code Playgroud)
有点混淆要采取什么措施来纠正这个问题.任何帮助赞赏.
在cordova-android 6.3.0(https://cordova.apache.org/announcements/2017/09/27/android-release.html)的发行说明中,记下cordova-plugin-compat
了必须删除的内容
如果我试试
cordova plugin rm cordova-plugin-compat
Run Code Online (Sandbox Code Playgroud)
我得到以下错误
[错误]运行cordova插件时发生错误删除cordova-plugin-compat --save(退出代码1):
错误:插件'cordova-plugin-compat'需要(cordova-plugin-calendar,cordova-plugin-camera,cordova-plugin-file,cordova-plugin-geolocation),跳过卸载.(如果尝试更新,请尝试--force)
如果我然后尝试--force
删除,它的工作,插件被删除,我能够构建我的Android应用程序.
但是,我刚刚删除了我的iOS
平台再次添加它,我现在面对错误
cordova准备ios错误:找不到插件"cordova-plugin-compat"的plugin.xml.请尝试重新添加.
[错误]运行cordova prepare ios时出错(退出代码1).
知道我做错了什么吗?应该真的cordova-plugin-compat
被删除?为什么我的iOS平台引用它,我以为它只适用于Android?
我使用cordova-android@6.3.0和cordova-ios@4.5.1
PS:如果我删除并添加iOS平台,compat插件会自动添加为package.json和package-lock.json中的参考
UPDATE
最后一个插件发布(https://cordova.apache.org/news/2017/11/10/plugins-release.html)最有可能分别解决这个问题,看起来问题是cordova-plugin-compat
从其他插件引用插件.但,
我还没有完全测试它并解决它,因为我正在使用另一个插件,其中也引用了compat(https://github.com/EddyVerbruggen/Calendar-PhoneGap-Plugin/issues/426).
我将保持这个线程打开,直到我能100%确认这解决了compat的引用.
最终更新
从Calendar-PhoneGap-Plugin
'cordova-plugin-compat' 删除依赖关系的PR 通过,我能够删除这个最后一个插件没有"强制"
我有一个基于Angular 1.6和Ionic v1的cordova应用程序.我在iOS上面临一个可怕的问题,我甚至不知道出了什么问题.我将解释这个问题以及到目前为止我所尝试的内容,希望有人会对此有所了解.
问题
我们有一个简单的屏幕,你可以填写一些文字并添加附件.对于附件,您可以:
然后,您可以保存记录,该记录将所有内容存储在文件系统上.或者上传到服务器,再次将记录存储在您的设备上.
问题是,当我从库或任何其他来源选择文件时,应用程序很快意外崩溃.我可以添加附件并保存/上传,但是当我离开时,应用程序崩溃了.这只发生在iOS上.没有错误,没有警告,没有可调试的输出,只是崩溃.我检查了iPhone上的崩溃日志,显然主线程被阻塞超过5秒.这导致看门狗违规异常被抛出.很难说是什么导致这个线程锁定,不知道.
我正在使用运行iOS 12.1的iPhone 8.值得一提的是,该应用程序在模拟器上工作正常,没有错误或崩溃.
我迄今为止所做的
一切起初,我认为我的代码可能出了问题.所以我逐行检查了每个代码文件,重构了我的JS代码并提高了代码质量.确保promises按预期工作,解决JSLint/TSLint警告等问题.
我已将所有cordova插件更新到最新版本.同时删除了两个平台并添加了最新版本.他们都没有帮助.所以我想也许我错过了配置怪癖等等.通过github文档和SO线程挖掘,找不到任何有用的东西.我尝试过的其他一些事情:
他们都没有工作.我已经在这个问题上苦苦挣扎了两个星期了.
奇怪的部分
令我困惑的是,当我定位我的本地开发机器时,也就是说,当我将API调用的基本URL设置为指向我的本地IIS时,应用程序运行得非常好.没有错误/错误,没有崩溃.
但是当我瞄准我们的远程服务器时,当我尝试使用附件(相机,iCloud等)时,应用程序崩溃了.我不知道我在这里缺少什么.我的机器和远程服务器之间没有区别.两者都运行完全相同的软件,相同的配置,并且移动应用程序是相同的构建,在同一设备上运行.
所以我可以肯定地说,这个问题与我的应用程序代码或Cordova及其插件无关.在定位我的本地IIS时,相同的构建工作完美.
我的应用程序已经投入生产,现在需要修复.这让我很生气,我已经尝试了所有我能想到的东西,但仍然没有运气.有没有人有类似的问题?任何帮助表示赞赏.
我没有权限分享我的代码,就像我说的那样,代码没有任何问题,在针对我的本地IIS时,它的工作原理非常好.但是供您参考,这里有一些关于我的项目的信息.
Config.xml中的首选项
<preference name="SplashScreen" value="screen" />
<preference name="windows-target-version" value="10.0" />
<preference name="AndroidPersistentFileLocation" value="Internal" />
<preference name="iosPersistentFileLocation" value="Library" />
<preference name="webviewbounce" value="false" />
<preference name="UIWebViewBounce" value="false" />
<preference name="DisallowOverscroll" value="true" />
<preference name="BackupWebStorage" value="local" />
Run Code Online (Sandbox Code Playgroud)
Cordova插件
<plugin name="cordova-plugin-geolocation" spec="^2.4.3">
<variable name="GEOLOCATION_USAGE_DESCRIPTION" value="Location access allows …
Run Code Online (Sandbox Code Playgroud)