为啥ios中的沙盒路径找不到文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥ios中的沙盒路径找不到文件相关的知识,希望对你有一定的参考价值。
1、模拟器沙盒目录文件都在个人用户名文件夹下的一个隐藏文件夹里,中文叫资源库,他的目录其实是Library。
因为应用是在沙箱(sandbox)中的,在文件读写权限上受到限制,只能在几个目录下读写文件:
Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录
tmp:存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除
Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除
iTunes在与iPhone同步时,备份所有的Documents和Library文件。
iPhone在重启时,会丢弃所有的tmp文件。
查看方法:
方法1、可以设置显示隐藏文件,然后在Finder下直接打开。设置查看隐藏文件的方法如下:打开终端,输入命名
(1)显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true
(2)隐藏Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false
(3)输完单击Enter键,退出终端,重新启动Finder就可以了 重启Finder:鼠标单击窗口左上角的苹果标志-->强制退出-->Finder-->
现在能看到资源库文件夹了。
打开资源库后找到/Application Support/iPhone Simulator/文件夹。这里面就是模拟器的各个程序的沙盒目录了。
方法2、这种方法更方便,在Finder上点->前往->前往文件夹,输入/Users/username/Library/Application Support/iPhone Simulator/ 前往。
username这里写用户名。
代码查看目录:
NSString *path = NSHomeDirectory();//主目录
NSLog(@"NSHomeDirectory:%@",path);
NSString *userName = NSUserName();//与上面相同
NSString *rootPath = NSHomeDirectoryForUser(userName);
NSLog(@"NSHomeDirectoryForUser:%@",rootPath);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory=[paths objectAtIndex:0];//Documents目录
NSLog(@"NSDocumentDirectory:%@",documentsDirectory);
结果如下:
2013-09-03 20:31:27.210 ios那啥[8383:c07] NSHomeDirectory:/Users/wmm/Library/Application Support/iPhone Simulator/6.1/Applications/D803DBD2-9CB2-4D18-9152-6E9398EFF5DB2013-09-03 20:31:27.210 ios那啥[8383:c07] NSHomeDirectoryForUser:/Users/wmm/Library/Application Support/iPhone Simulator/6.1/Applications/D803DBD2-9CB2-4D18-9152-6E9398EFF5DB2013-09-03 20:31:27.211 ios那啥[8383:c07] NSDocumentDirectory:/Users/wmm/Library/Application Support/iPhone Simulator/6.1/Applications/D803DBD2-9CB2-4D18-9152-6E9398EFF5DB/Documents 自定义类返回各目录路径:
#import <Foundation/Foundation.h>
@interface ICSandboxHelper : NSObject
+ (NSString *)homePath; // 程序主目录,可见子目录(3个):Documents、Library、tmp
+ (NSString *)appPath; // 程序目录,不能存任何东西
+ (NSString *)docPath; // 文档目录,需要ITUNES同步备份的数据存这里,可存放用户数据
+ (NSString *)libPrefPath; // 配置目录,配置文件存这里
+ (NSString *)libCachePath; // 缓存目录,系统永远不会删除这里的文件,ITUNES会删除
+ (NSString *)tmpPath; // 临时缓存目录,APP退出后,系统可能会删除这里的内容
+ (BOOL)hasLive:(NSString *)path; //判断目录是否存在,不存在则创建
#import "ICSandboxHelper.h"
@implementation ICSandboxHelper
+ (NSString *)homePath
return NSHomeDirectory();
+ (NSString *)appPath
NSArray * paths = NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSUserDomainMask, YES);
return [paths objectAtIndex:0];
+ (NSString *)docPath
NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
return [paths objectAtIndex:0];
+ (NSString *)libPrefPath
NSArray * paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
return [[paths objectAtIndex:0] stringByAppendingFormat:@"/Preference"];
+ (NSString *)libCachePath
NSArray * paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
return [[paths objectAtIndex:0] stringByAppendingFormat:@"/Caches"];
+ (NSString *)tmpPath
return [NSHomeDirectory() stringByAppendingFormat:@"/tmp"];
+ (BOOL)hasLive:(NSString *)path
if ( NO == [[NSFileManager defaultManager] fileExistsAtPath:path] )
return [[NSFileManager defaultManager] createDirectoryAtPath:path
withIntermediateDirectories:YES
attributes:nil
error:NULL];
return NO;
参考技术A 说明你没把文件拷贝进去。。
我在使用 paypal checkout-sdk 的沙盒中找不到交易历史记录
【中文标题】我在使用 paypal checkout-sdk 的沙盒中找不到交易历史记录【英文标题】:I can't find out transaction history in sandbox use paypal checkout-sdk 【发布时间】:2021-10-10 10:47:39 【问题描述】:我使用javacheckout-sdk-1.0.4
开发PayPal支付。我成功向 PayPal 提交订单,获取付款 url。
我用个人账号登录,然后点击continue
按钮。
然后paypal直接重定向到我设置的url。
http://localhost:38001/checkout/submit/result?token=60X99286YV4394812&PayerID=9WXE2YPSNEJSN
我可以在开发人员仪表板中查看 api 调用历史记录。
但是我在我的企业账户和个人账户中看不到任何交易记录。
如何判断我的支付是否成功。
我从这里尝试这个教程
https://developer.paypal.com/docs/business/checkout/server-side-api-calls/create-order/
https://developer.paypal.com/docs/business/checkout/server-side-api-calls/capture-order/
最后paypal返回抓包成功。
Status Code: 201
Status: COMPLETED
Order ID: 1AL061567P026410J
Links:
self: https://api.sandbox.paypal.com/v2/checkout/orders/1AL061567P026410J
Capture ids:
6NY33838LX3268618
但我仍然无法在我的个人测试帐户中看到交易记录。
【问题讨论】:
【参考方案1】:但我在我的企业帐户和个人帐户中看不到任何交易记录。在此处输入图片说明
您看不到任何交易,因为没有交易。除非您显示所需的订单审核页面并在客户返回您的站点时执行所需的捕获 API 调用,否则不会有任何内容。 (如果您想跳过显示评论页面并直接进行 API 调用,那么您应该将 application_context 对象的 user_action 设置为“PAY_NOW”,因此最后一个按钮的文本从“Continue”更改为“Pay Now”并且用户知道不会有评论页面。无论如何,您仍然需要执行 API 调用来捕获)。
您使用的重定向到 PayPal,然后在重定向回后显示评论页面或进行捕获调用的流程是旧的结帐流程,无法提供最佳用户体验。 最好不要使用任何重定向。完全没有。
相反,在您的服务器上创建两条路由,一条用于“创建订单”,一条用于“捕获订单”,documented here。这些路由应该只返回 JSON 数据(没有 HTML 或文本)。后者应该(成功时)在返回之前将付款详细信息存储在您的数据库中(特别是purchase_units[0].payments.captures[0].id
,PayPal 交易 ID)
将这两条路线与以下批准流程配对:https://developer.paypal.com/demo/checkout/#/pattern/server
【讨论】:
一个完整的事务应该做create order
和capture order
吗?
成功捕获订单将导致交易。事务 ID 在purchase_units[0].payments.captures[0].id
中返回。如果您没有收到该值,则说明您没有交易。
我已经更新了我的问题,我捕获了订单并获取了捕获 ID,但仍然看不到交易。
这是一个已完成的交易,所以它会在那里。确保您使用来自paypal.com/… 的正确沙盒业务帐户登录sandbox.paypal.com
请记住,您必须登录到与您的沙盒客户端 ID 的 REST 应用关联的那个:paypal.com/…以上是关于为啥ios中的沙盒路径找不到文件的主要内容,如果未能解决你的问题,请参考以下文章