IOS升级app后imageURI变化

Posted

技术标签:

【中文标题】IOS升级app后imageURI变化【英文标题】:imageURI changes after IOS upgrade of app 【发布时间】:2014-02-01 23:34:53 【问题描述】:

我有一个 jquery 移动应用程序(phonegap 构建)。我有一个函数可以从设备的照片库中获取图像的 uri。我将 uri 作为字符串存储在本地存储中,因此下次打开页面时,图像会使用 uri 显示。所有这一切都很好(我没有得到图像的 Data-UrI,因为我不想用完本地存储,而且我当然不想将图像上传到服务器,因为应用程序正在使用学校(隐私问题)。不过,在设备上很好。在我对应用程序进行更新之前,一切正常。安装更新后,图像的 URI 会发生变化。如何获得所选图片的静态 URI。这是我用来从图库中获取图像的代码。:

  // javascript Document  //Get Picture stuff 
  navigator.camera.getPicture(onPhotoURISuccess, onFail,  quality: 50, destinationType:
  destinationType.FILE_URI, sourceType:Camera.PictureSourceType.SAVEDPHOTOALBUM);

   var pictureSource;   // picture source
   var destinationType; // sets the format of returned value 
   pictureSource=navigator.camera.PictureSourceType;
   destinationType=navigator.camera.DestinationType;

   function onPhotoURISuccess(imageURI) 
   // Uncomment to view the image file URI 
     console.log(imageURI);
     localStorage.setItem("piclink", imageURI)

   // Get image handle
    var largeImage = document.getElementById('largeImage');

    // Unhide image elements
     largeImage.style.display = 'block';

    // Show the captured photo
     // The inline CSS rules are used to resize the image
     largeImage.src = imageURI;
     
     // Called if something bad happens.
    function onFail(message) alert('Failed because: ' + message);
     

我应该提到,我应用的更新不会对相机代码进行任何更改。所有数据都很好地保存在本地存储中,我可以通过控制台看到它保存并调用 URI 没有问题,但是在更新后的 URI 路径中,路径发生了变化(一大串数字和破折号)。 bTW,安卓版没有问题。任何帮助将不胜感激

【问题讨论】:

【参考方案1】:

我的理解是,您保存到 localStorage 的 imageURI 只是 CDV Camera 插件处理的名为 cdv_* 的临时文件。正如 user2603892 正确指出的那样,您似乎关心的是应用在更新上的新应用位置标识符。但是,可能还有其他几个问题需要考虑……相机插件将临时文件按顺序命名为从库中选择的文件,或作为照片拍摄的文件。 cdv_photo_001.jpg、cdv_photo_002.jpg 等。这会一直持续到您执行 camera.cleanup() 来删除 cdv_* 文件。

插件将这些文件存储在应用程序根目录之外的 /tmp 文件夹中。显然,ios 在更新时也不会复制它。

来自模拟器的示例:imageURI = file:///Users/xxxxxxx/Library/Application%20Support/iPhone%20Simulator/7.0.3/Applications/B7B2005C-C116-4BCB-897D-CD46672123C3/tmp/cdv_photo_001.jpg

建议将您的文件(不是文件名)重命名并保存到 1) Documents 文件夹或 2) Application Support 文件夹,然后引用它以供将来使用。

希望这会有所帮助。

【讨论】:

谢谢。当您说“1)文档文件夹或 2)应用程序支持文件夹,然后引用它以供将来使用”时,我不确定我是否理解权限。我以为您的应用程序基本上没有存储权限。或者,如果我将图片存储到用户的 doc 文件夹中,我基本上是在他们的卷中创建图像的副本吗?抱歉,对此很陌生。 您的应用在其沙箱中拥有存储权限。也许查看 CDVFile 插件会有所帮助。此外,Documents 文件夹是设备上的默认“共享”存储,它也与 iCloud 同步。是的,您将从他们的卷中存储所选图像的副本,在设备上。这样,您将拥有一个在您的控制之下的固定 URI(例如,当您需要时更新它)并且还允许您清理相机插件的 tmp 文件夹,如果您还没有这样做的话,因为它可能会变得非常大。 【参考方案2】:

我知道这是一篇旧帖子,但我想分享我的发现,希望它可以帮助其他人。我在一个应用程序上遇到了同样的问题,它必须在本地存储图像而不将它们上传到服务器。似乎问题正在发生,因为 iTunes 将更新安装在 iOS App Programming Guide 中所述的新应用程序目录中

应用程序更新期间保存的文件 当用户下载应用程序更新时,iTunes 会将更新安装在新的应用程序目录中。然后它将用户的数据文件从旧安装移动到新的应用程序目录,然后再删除旧安装。以下目录中的文件保证在更新过程中被保留:

<Application_Home>/Documents
<Application_Home>/Library 

虽然其他用户目录中的文件也可能被移动,但您不应依赖它们在更新后存在。

正如Here所讨论的那样。

您在帖子中提到的“大量数字和破折号”是应用程序目录。每次更新都会更改,因此保存的 URI 将与更新后的当前 URI 不同。

我仍在寻找解决方法,但还没有找到任何东西。

【讨论】:

感谢您的更新——是的,这有点痛苦,因为我的应用程序使用的图像不需要上传到服务器。事实上,因为该应用程序用于学校,我们不希望照片离开相机。希望能找到解决办法。

以上是关于IOS升级app后imageURI变化的主要内容,如果未能解决你的问题,请参考以下文章

WWDC20开发者大会:iOS 14 带来哪些新功能和新变化?(附升级方法)

详解iOS11iPhone XXcode9 适配指南

iOS11iPhone XXcode9 适配指南

iOS之iOS11iPhone XXcode9 适配指南

ios14公测版可以升级啦!

浅谈iOS10新功能及变化