$ cordovaFileTransfer.download在Xcode更新后无效

时间:2015-09-29 05:22:56

标签: ios objective-c xcode cordova

我用ionic和ngCordova创建了一个cordova应用程序。 我的申请很简单:下载图片

我的代码是:

var from = 'http://www.diana.dti.ne.jp/~june1/perfume/perfume_voce.jpg';
var to = cordova.file.documentsDirectory + 'perfume.jpg';
var trustHosts = true;
var opt = {};

$cordovaFileTransfer.download(from, to, opt, trustHosts)
  .then(function(result) {

    // Image Success!
    alert('success');

  }, function(err) {

    // Image Error
    alert("An error has occurred: Code = " + err.code);

  }, function (progress) {

    // Image Progress

  });

我想下载这张图片:http://www.diana.dti.ne.jp/~june1/perfume/perfume_voce.jpg 在documentsDirectory上

我在2台计算机(Apple)上使用此代码,在Xcode更新之前,没有出现错误。

上周我在第一台计算机上更新了Xcode,我收到了这个错误:

发生错误:代码= 3

这是科尔多瓦的文件:https://github.com/apache/cordova-plugin-file-transfer#user-content-constants

此错误是因为cordova阻止访问外部源。

我继续使用我的第二台电脑因为它没问题,但今天我也更新了Xcode。现在我有同样的错误。

Cordova阻止访问外部源。 为了确认这一点,我尝试将本地图片转移到documentsDirectory及其工作。

var from = cordova.file.applicationDirectory+'www/original.jpg';
var to = cordova.file.documentsDirectory + 'perfume.jpg';
var trustHosts = true;
var opt = {};

$cordovaFileTransfer.download(from, to, opt, trustHosts)
  .then(function(result) {

    // Image Success!
    alert('success');

  }, function(err) {

    // Image Error
    alert("An error has occurred: Code = " + err.code);

  }, function (progress) {

    // Image Progress

  });

这是我的config.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<widget id="com.ionicframework.test5119111" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
  <name>test5</name>
  <description>
        An Ionic Framework and Cordova project.
    </description>
  <author email="hi@ionicframework" href="http://ionicframework.com/">
      Ionic Framework Team
    </author>
  <content src="index.html"/>
  <access origin="*"/>
  <allow-navigation href="*" />

  <preference name="AndroidPersistentFileLocation" value="Compatibility" />
  <preference name="iosPersistentFileLocation" value="Library" />
  <preference name="iosPersistentFileLocation" value="Compatibility" />

  <feature name="File">
      <param name="ios-package" value="CDVFile" />
  </feature>

  <feature name="FileTransfer">
      <param name="ios-package" value="CDVFileTransfer" />
  </feature>


  <preference name="AllowInlineMediaPlayback" value="true"/>

  <preference name="DisallowOverscroll" value="true" />
  <preference name="UIWebViewBounce" value="false" />

  <preference name="android-minSdkVersion" value="14" />

  <feature name="Device">
    <param name="android-package" value="org.apache.cordova.Device" />
  </feature>

  <preference name="webviewbounce" value="false"/>
  <preference name="UIWebViewBounce" value="false"/>
  <preference name="DisallowOverscroll" value="true"/>
  <preference name="android-minSdkVersion" value="16"/>
  <preference name="BackupWebStorage" value="none"/>
  <preference name="SplashScreen" value="screen"/>
  <preference name="SplashScreenDelay" value="3000"/>
  <feature name="StatusBar">
    <param name="ios-package" value="CDVStatusBar" onload="true"/>
  </feature>
  <platform name="ios">
    <icon src="resources/ios/icon/icon.png" width="57" height="57"/>
    <icon src="resources/ios/icon/icon@2x.png" width="114" height="114"/>
    <icon src="resources/ios/icon/icon-40.png" width="40" height="40"/>
    <icon src="resources/ios/icon/icon-40@2x.png" width="80" height="80"/>
    <icon src="resources/ios/icon/icon-50.png" width="50" height="50"/>
    <icon src="resources/ios/icon/icon-50@2x.png" width="100" height="100"/>
    <icon src="resources/ios/icon/icon-60.png" width="60" height="60"/>
    <icon src="resources/ios/icon/icon-60@2x.png" width="120" height="120"/>
    <icon src="resources/ios/icon/icon-60@3x.png" width="180" height="180"/>
    <icon src="resources/ios/icon/icon-72.png" width="72" height="72"/>
    <icon src="resources/ios/icon/icon-72@2x.png" width="144" height="144"/>
    <icon src="resources/ios/icon/icon-76.png" width="76" height="76"/>
    <icon src="resources/ios/icon/icon-76@2x.png" width="152" height="152"/>
    <icon src="resources/ios/icon/icon-small.png" width="29" height="29"/>
    <icon src="resources/ios/icon/icon-small@2x.png" width="58" height="58"/>
    <icon src="resources/ios/icon/icon-small@3x.png" width="87" height="87"/>
    <splash src="resources/ios/splash/Default-568h@2x~iphone.png" height="1136" width="640"/>
    <splash src="resources/ios/splash/Default-667h.png" height="1334" width="750"/>
    <splash src="resources/ios/splash/Default-736h.png" height="2208" width="1242"/>
    <splash src="resources/ios/splash/Default-Landscape-736h.png" height="1242" width="2208"/>
    <splash src="resources/ios/splash/Default-Landscape@2x~ipad.png" height="1536" width="2048"/>
    <splash src="resources/ios/splash/Default-Landscape~ipad.png" height="768" width="1024"/>
    <splash src="resources/ios/splash/Default-Portrait@2x~ipad.png" height="2048" width="1536"/>
    <splash src="resources/ios/splash/Default-Portrait~ipad.png" height="1024" width="768"/>
    <splash src="resources/ios/splash/Default@2x~iphone.png" height="960" width="640"/>
    <splash src="resources/ios/splash/Default~iphone.png" height="480" width="320"/>
  </platform>
  <platform name="android">
    <icon src="resources/android/icon/drawable-ldpi-icon.png" density="ldpi"/>
    <icon src="resources/android/icon/drawable-mdpi-icon.png" density="mdpi"/>
    <icon src="resources/android/icon/drawable-hdpi-icon.png" density="hdpi"/>
    <icon src="resources/android/icon/drawable-xhdpi-icon.png" density="xhdpi"/>
    <icon src="resources/android/icon/drawable-xxhdpi-icon.png" density="xxhdpi"/>
    <icon src="resources/android/icon/drawable-xxxhdpi-icon.png" density="xxxhdpi"/>
    <splash src="resources/android/splash/drawable-land-ldpi-screen.png" density="land-ldpi"/>
    <splash src="resources/android/splash/drawable-land-mdpi-screen.png" density="land-mdpi"/>
    <splash src="resources/android/splash/drawable-land-hdpi-screen.png" density="land-hdpi"/>
    <splash src="resources/android/splash/drawable-land-xhdpi-screen.png" density="land-xhdpi"/>
    <splash src="resources/android/splash/drawable-land-xxhdpi-screen.png" density="land-xxhdpi"/>
    <splash src="resources/android/splash/drawable-land-xxxhdpi-screen.png" density="land-xxxhdpi"/>
    <splash src="resources/android/splash/drawable-port-ldpi-screen.png" density="port-ldpi"/>
    <splash src="resources/android/splash/drawable-port-mdpi-screen.png" density="port-mdpi"/>
    <splash src="resources/android/splash/drawable-port-hdpi-screen.png" density="port-hdpi"/>
    <splash src="resources/android/splash/drawable-port-xhdpi-screen.png" density="port-xhdpi"/>
    <splash src="resources/android/splash/drawable-port-xxhdpi-screen.png" density="port-xxhdpi"/>
    <splash src="resources/android/splash/drawable-port-xxxhdpi-screen.png" density="port-xxxhdpi"/>
  </platform>
</widget>
你能帮帮我吗? 我的错误在哪里以及为什么在Xcode更新后,$ cordovaFileTransfer.download不起作用?

非常感谢你 (抱歉我的床英语)

1 个答案:

答案 0 :(得分:0)

@seikida, 你已经遇到了三大问题,本周末有两个。

1. Apple将iOS设备更新为iOS9。 Cordova,Phonegap和Ionic不正式支持iOS9 YET。这对您来说可能不是问题。  2.如果您没有为您的APP设置编译器版本,您将自动获得最新版本。如果你这样做,那么你必须使用 white-list white-list 插件和CSP。您可以使用4.0.0之前的编译器版本来避免白名单,例如3.7.0  3.在周末,默认编译器设置为cli-5.2.0。这会强制您使用 white-list 。修复程序位于

之下

以下是有关您的问题的其他详细信息。

1。现在支持iOS9

2015年11月2日以来,Cordova支持iOS 9

Apache Cordova iOS 3.9.2
http://cordova.apache.org/announcements/2015/11/02/cordova-ios-3-9-2.html

1。不支持iOS9 YET!

PhoneGap构建iOS 9支持状态

  • 2015年9月23日
  • http://community.phonegap.com/nitobi/topics/phonegap-build-ios-9-support-status
  • 第一线:iOS 9 NOT 正式支持Cordova-iOS 4.0.0,Cordova团队正在努力工作。但是,通过一些简单的配置更改可以解决一些问题。

    无论你使用什么,正如论坛帖子所述,直到Cordova-iOS 4.0.0,iOS 9才得到官方支持。这意味着,创建一个解决方案,或等到它得到官方支持。或者用cordova提交错误报告。或者等到其他人创建一个解决方案。

    仅在使用iOS 9.0.1时适用

    2。未设置编译器版本

来自 Phonegap Build 论坛,Petra Adds

  

我想补充一点:没有公告,PGB将默认PGB版本从3.7.0更改为cli-5.2.0。这导致所有未在config.xml中设置'phonegap-version'的人面临突然需要的泼水屏幕和白名单插件以及配置和HTML中的其他白名单规范。

     

此外,几个插件似乎无法使用cli-5.2.0正确构建,导致关于“Class ***。java”的日志文件错误消息。

FWIW: Phonegap Build admitted to as much in this tweet

来自Top Mistakes by Developers new to Cordova/Phonegap你已经点击了:

  • #6 未为您的编译器设置“phonegap版本”
  • #7 没有为您的插件设置“版本”
  • #10 未在config.xml中添加新的“white-list”和“white-list plugin”参数。

对于#6&amp; #7

  

使用CLI版本,如果您没有为您的平台分配版本,或者如果您未在config.xml中设置phonegap-version,则在“Phonegap Build”中,您将获得最新版本。如果运气好,您的程序就会按预期运行。如果你不幸运,你会得到一组级联错误。

     

幸运的是,对于我们所有人来说,Holly Schinsky写了一篇很好的博文来解释这一切:

     

Cordova / PhoneGap版本混淆
  http://devgirl.org/2014/11/07/cordovaphonegap-version-confusion/

#10

  

这个相对*新*要求意味着 - 要访问网络上的任何网站或资源,您必须使用白名单和白名单插件。如果您使用cordova-android@4.0.0或更高版本,此要求将生效;包括cli-5.1.1。但是,如果您的版本在4.0.0之前,请使用3.5.0或3.7.0,那么必须添加 white-list 要求。< / p>      

要明确的是,“白名单”已经存在了一段时间,但插件和要求非常新。正如您所料,当添加“白名单”时,不推荐使用事实上的开放访问功能。或者说另一种方式,事实上开放访问功能已被计划并计划被淘汰。此更改标志着删除开放访问功能的一个步骤。

     

此外,内容安全策略(CSP)已经吸引了众多开发人员 - 因为它的公开性很差。这个CSP需要进入您使用的每个HTML页面,就像您必须等待'deviceready'一样。该文档隐藏在许多最新文档页面的底部。

相关链接

  

Phonegap Build Forum:Notes for upgrading to cli-5.1.1 on PGB,现在需要白名单