ios訪問沙盒
1. ios什麼時候用沙盒和什麼時候用資料庫
IOS中的沙盒機制(SandBox)是一種安全體系,它規定了應用程序只能在為該應用創建的文件夾內讀取文件,不可以訪問其他地方的內容。所有的非代碼文件都保存在這個地方,比如圖片、聲音、屬性列表和文本文件等。
1.每個應用程序都在自己的沙盒內
2.不能隨意跨越自己的沙盒去訪問別的應用程序沙盒的內容
3.應用程序向外請求或接收數據都需要經過許可權認證
查看模擬器的沙盒文件夾在Mac電腦上的存儲位置,首先,這個文件夾是被隱藏的,所以要先將這些文件顯示出來,打開命令行:
顯示Mac隱藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true
隱藏Mac隱藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false
然後重新啟動Finder,點擊屏幕左上角蘋果標志——強制退出——選擇Finder然後點擊重新啟動,這個時候在重新打開Finder就可以看到被隱藏的文件了。
還有一種比較簡單的辦法就是直接點擊Finder圖標右鍵——前往文件夾——輸入/Users/your username/Library/Application Support/iPhone Simulator/ ,然後確認就可以了。your username是你本機的用戶名
2. 蘋果手機沙盒賬號怎麼登錄
沙盒賬號的正確使用方式
沙盒賬號使用的注意事項
1.沙盒賬號是什麼
iOS應用裡面用到了蘋果應用內付費(IAP)功能,在項目上線前一定要進行功能測試。測試肯定是需要的,何況這個跟money有關。。。開發完成了之後,如何進行測試呢?難道我測試個內購功能要自己掏錢?就算是公司掏錢,但是蘋果要吃掉3成的啊,想想如果是99刀的商品,點下購買心裡都有點發慌。。。
蘋果當然沒這么坑了,測試內購,蘋果提供了沙沙盒賬號(也叫沙箱賬號)的方式。這個沙箱賬號其實是虛擬的AppleID,在ituneconnect上配置了之後就能使用沙盒賬號進行測試內購,有了沙盒賬號,就能體驗一把土豪的感覺了,游戲鑽石什麼的隨便充,反正不用我的錢。
注意:你可以把沙盒賬號看做是一個虛擬的AppleID,這個AppleID只有進行內購測試的功能。
2.沙盒賬號使用的前提
app的內購模塊已經開發完成,能進行內購測試(如果正在開發,至少能彈出輸入AppleID的窗口吧)
內購的商品ID等相關信息已經錄入到開發者後台了(不然那你買什麼)
開發者後台已經創建好沙盒測試賬號了(下面我們會將如何創建)
你要有一部真機(iPhone或iPad都行,別用模擬器就好。而且不能是越獄機)
bundleID別搞錯了,開發者賬號、證書、bundleID要一致
3.沙盒賬號創建
登錄蘋果開發者後台--iTunes Connect--用戶和職能--沙箱測試技術員,在這個界面你可以看到當前賬號已經創建好的沙盒賬號。
11.png
沙箱測試技術員管理界面
點擊「+」進行創建
12.png
創建沙盒賬號
13.png
新創建的沙盒賬號
如圖,我創建一個沙盒賬號。具體信息:
3. 在ios沙盒機制下下面哪個文件夾是用來存放數據的
IOS沙盒機制(SandBox)種安全體系規定應用程序能該應用創建文件夾內讀取文件訪問其內容所非代碼文件都保存比圖片、聲音、屬性列表文本文件等
1.每應用程序都自沙盒內
2.能隨意跨越自沙盒訪問別應用程序沙盒內容
3.應用程序向外請求或接收數據都需要經許可權認證
查看模擬器沙盒文件夾Mac電腦存儲位置首先文件夾隱藏所要先些文件顯示打命令行:
顯示Mac隱藏文件命令:defaults write com.apple.finder AppleShowAllFiles -bool true
隱藏Mac隱藏文件命令:defaults write com.apple.finder AppleShowAllFiles -bool false
重新啟Finder點擊屏幕左角蘋標志——強制退——選擇Finder點擊重新啟候重新打Finder看隱藏文件
種比較簡單辦直接點擊Finder圖標右鍵——前往文件夾——輸入/Users/your username/Library/Application Support/iPhone Simulator/ ,確認your username本機用戶名
4. ios軟體開發。越獄之後!用戶能夠通過itunes訪問所有應用程序的沙盒(document)嗎
沒法通過iTunes訪問,但你可以使用設備上的iFile程或者PC上的iTools、91手機助手、iFunbox等軟體訪問並編輯、管理
5. iOS怎麼獲取並移除沙盒中Documents文件夾下的所有文件
IOS中的沙盒機制(SandBox)是一種安全體系,它規定了應用程序只能在為該應用創建的文件夾內讀取文件,不可以訪問其他地方的內容。iOS越獄不代表沙盒(sandbox)的移除,至少現在的越獄方案都不會做這樣的傻事(不同的越獄方案對沙盒會有所不同的影響)。但可以肯定:通過App Store渠道下載安裝(在路徑/var/mobile/Applications/下面)的應用依然會被困在自己的沙盒內,即便是越獄環境,那麼它們也不能非法未授權訪問沙盒以外的文件,譬如說簡訊(/var/mobile/Library/SMS/sms.db)。 既然沙盒未被移除,那越獄的風險是什麼?是安裝的應用並不需要經過App Store的證書校驗。就是說安裝的應用可以自己選擇安裝路徑,譬如說跟Apple的預裝應用一樣安裝在/var/stash/Applications/下面,那麼它便不受沙盒控制。它可以訪問的文件就太多了,不限於你的簡訊、你的聯系人、你的郵件、你的設置等等... 看到這里,你或許已經知道,為什麼我們不推薦,甚至極力反對大家在越獄之後於App Store以外的渠道安裝iOS普通應用(指那些IPA後綴的常規應用),即便你說這些應用不是盜版,它們是免費應用,並且是獲得開發者授權才於這些商店上架雲雲...... Hey,你知道我不是跟你說什麼盜版(這還需要再費口舌嗎)。而是,我們無法清楚了解它們是否跟App Store上面分發的那個版本一模一樣,還是說加過料的。譬如說,會安裝在它們不應該在的路徑下面,跳出沙盒的控制,又或者說帶了其它數據收集的組件。 所以,越獄之後,請還繼續在App Store安裝應用。在Cydia上面只安裝你信任的tweaks,通常我不會建議安裝國內公司開發的任意軟體,也不要添加他們提供的任何Cydia源。你知道,有時候App Store的條款和限制都綁不住這些流氓,放出來怎麼得了?再進一步,如果一個國內公司開發的應用取得跟Cydia一樣的地位,譬如說太極助手...後果我不敢想像。當我們選擇越獄,一定程度上,是因為我們信任解決方案背後的越獄社群,信任Cydia,信任saurik,也相信這個社群的人會相互監督。但如果你把這種信任放在錯誤的人身上,那麼...你要對自己負責,別人說活該的時候也認了罷。 那是否iOS越獄之後,從App Store安裝的應用就一定安全?也並非如此,上面說了不同的越獄方案對sandbox的影響會有不同。但通常都會使其變得更虛弱,譬如說越獄之後這些應用可以‘fork’沙盒外的文件。當然,危害就沒有那麼大,也無需太過緊張。App Store上面的應用並沒有壞到假設你的設備已經越獄然後針對開發出壞壞的功能隱蔽躲過App Store Review然後上架看能不能對已經越獄的設備作點壞事。
6. ios的應用沙箱運行是怎麼一回事
1、IOS沙盒機制
IOS應用程序只能在本應用程序中創建的文件系統中讀取文件,不可以去其它地方訪問,此區域被成為沙盒,所有的非代碼文件都要保存在此,例如圖像,圖標,聲音,映像,屬性列表,文本文件等。
1.1、每個應用程序都有自己的存儲空間
1.2、應用程序不能翻過自己的圍牆去訪問別的存儲空間的內容
1.3、應用程序請求的數據都要通過許可權檢測,假如不符合條件的話,不會被放行。
通過這張圖只能從表層上理解sandbox是一種安全體系,應用程序的所有操作都要通過這個體系來執行,其中核心內容是:sandbox對應用程序執行各種操作的許可權限制。
2、打開模擬器沙盒目錄
下面看看模擬器的沙盒文件夾在mac電腦上的什麼位置。
文件都在個人用戶名文件夾下的一個隱藏文件夾里,中文叫資源庫,英文名是Library。
下面介紹一種簡單方法前往該文件夾:在Finder上點->前往->前往文件夾
進入模擬器後,裡面就包含了各個應用程序的沙盒。
進入一個應用程序,如下圖,就是一個沙箱了。
下面介紹一下沙箱的目錄結構:
默認情況下,每個沙盒含有3個文件夾:Documents, Library 和 tmp和一個應用程序文件(也是一個文件)。因為應用的沙盒機制,應用只能在幾個目錄下讀寫文件
Documents:蘋果建議將程序中建立的或在程序中瀏覽到的文件數據保存在該目錄下,iTunes備份和恢復的時候會包括此目錄
Library:存儲程序的默認設置或其它狀態信息;
Library/Caches:存放緩存文件,iTunes不會備份此目錄,此目錄下文件不會在應用退出刪除
tmp:提供一個即時創建臨時文件的地方。
iTunes在與iPhone同步時,備份所有的Documents和Library文件。
iPhone在重啟時,會丟棄所有的tmp文件。
注意:這里很容易和bundle混淆在一起,下面根據自己的一點理解說明二者的區別:
bundle :生成 iOS 應用程序時,Xcode 將它捆綁成一個包。捆綁包 (bundle) 是文件系統中的一個目錄,它將相關資源成組在一個地方。一個 iOS 應用程序捆綁包中,含有其可執行文件和支持資源文件(如應用程序圖標、圖像文件和已本地化的內容)。
A bundle(包裹、捆、束) is a directory with a standardizedhierarchical structure that holds executable code and the resources used by that code.
所以可以將整個應用程序其實就可以看做一個bundle。
沙箱的概念和bundle沒直接關系,沙箱只是說明程序資源與外界隔離
下面通過一個簡單的例子說明一下bundle和sandbox。
//新建的plist文件是在應用程序中的,可以通過bundle存取到該文件
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"MyPlist" ofType:@"plist"];
NSMutableArray *array = [NSMutableArray arrayWithContentsOfFile:plistPath];
//向數組中新添加一個項目
[array addObject:@"3"];
//重新寫回plist文件中
BOOL value = [array writeToFile:plistPath atomically:YES];
if (value) {
NSMutableArray *newArray = [NSMutableArray arrayWithContentsOfFile:plistPath];
NSLog(@"new array = %@",newArray);
}
/* 輸出:
new array = (
0,
1,
2,
3
)
*/
//獲取沙箱中document的path
NSArray *paths = (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *newPath = [documentsDirectory :@"data.plist"];
//將數組寫入到沙箱的document中的data.plist文件中
[array writeToFile:newPath atomically:YES];
NSMutableArray *arr = [[NSMutableArray alloc] initWithContentsOfFile:newPath];
NSLog(@"array in data.plist = %@",arr);
/* 輸出:
array in data.plist = (
0,
1,
2,
3
)
*/
說明:我們首先在項目中新建一個plist文件(root項的類型為數組),添加了3個元素。因為新建的plist文件是在應用程序中的,我們可以通過bundle獲取到這個plist文件,讀取出這個數組,添加一個數據元素後,重新寫回plist文件中。接著我們獲取沙箱document的path,然後將這個文件寫入到沙箱中的data.plist文件中(如果不存在,會自動新建一個的),然後再從data.plist讀取出這個數組。
關於新建的MyPlist.plist文件,我們寫迴文件的數組中添加了一項新的元素,但是我們在xcode中查看這個MyPlist.plist文件時,發現並沒有顯示出新增的數組元素,但是我們到沙箱中查看就可以看到了,這個估計是xoode本身的問題。
關於document中data.plist文件查看我們也可以到沙箱中進行查看。如下圖:
3、獲取沙盒目錄:
//1、獲取程序的Home目錄
NSString *homeDirectory = NSHomeDirectory();
NSLog(@"path:%@", homeDirectory);
//path:/Users/ios/Library/Application Support/iPhone Simulator/6.1/Applications/BF38C9E3-1A4A-4929-B5F2-3E46E41CC671
//2、獲取document目錄
NSArray *paths = (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
NSLog(@"path:%@", path);
//path:/Users/ios/Library/Application Support/iPhone Simulator/6.1/Applications/BF38C9E3-1A4A-4929-B5F2-3E46E41CC671/Documents
//3、獲取Cache目錄
NSArray *paths = (NSCachesDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
NSLog(@"path:%@", path);
//path:/Users/ios/Library/Application Support/iPhone Simulator/6.1/Applications/BF38C9E3-1A4A-4929-B5F2-3E46E41CC671/Library/Caches
//4、獲取Library目錄
NSArray *paths = (NSLibraryDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
NSLog(@"path:%@", path);
//path:/Users/ios/Library/Application Support/iPhone Simulator/6.1/Applications/BF38C9E3-1A4A-4929-B5F2-3E46E41CC671/Library
//5、獲取tmp目錄
NSString *tmpDir = NSTemporaryDirectory();
NSLog(@"path:%@", tmpDir);
//path:/Users/ios/Library/Application Support/iPhone Simulator/6.1/Applications/BF38C9E3-1A4A-4929-B5F2-3E46E41CC671/tmp/
4、文件操作之NSFileManager
4.1 、在document中創建一個文件目錄
NSArray *paths = (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSLog(@"documentsDirectory%@",documentsDirectory);
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *testDirectory = [documentsDirectory :@"test"];
// 創建目錄
[fileManager createDirectoryAtPath:testDirectory withIntermediateDirectories:YES attributes:nil error:nil];
4.2 、 在test目錄下創建文件
創建文件怎麼辦呢?接著上面的代碼 testPath 要用拼接上你要生成的文件名,比如test11.txt。這樣才能在test目錄下寫入文件。
testDirectory是上面代碼生成的路徑哦,不要忘了。我往test文件夾里寫入三個文件,test11.txt ,test22.txt,text.33.txt。內容都是寫入內容,write String。
實現代碼如下:
NSString *testPath1 = [testDirectory :@"test1.txt"];
NSString *testPath2 = [testDirectory :@"test2.txt"];
NSString *testPath3 = [testDirectory :@"test3.txt"];
NSString *string = @"寫入內容,write String";
[fileManager createFileAtPath:testPath1 contents:[string dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
[fileManager createFileAtPath:testPath2 contents:[string dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
[fileManager createFileAtPath:testPath3 contents:[string dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
4.3獲取目錄列里所有文件名
兩種方法獲取:subpathsOfDirectoryAtPath 和 subpathsAtPath
NSArray *paths = (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSLog(@"documentsDirectory%@",documentsDirectory);
NSFileManager *fileManage = [NSFileManager defaultManager];
NSString *myDirectory = [documentsDirectory :@"test"];
//方法一
NSArray *file = [fileManage subpathsOfDirectoryAtPath: myDirectory error:nil];
NSLog(@"%@",file);
//方法二
NSArray *files = [fileManage subpathsAtPath: myDirectory ];
NSLog(@"%@",files);
獲取剛才test目錄下的所以文件名:
兩種方法都是輸出
(
"test1.txt",
"test2.txt",
"test3.txt"
)
4.4 、fileManager使用操作當前目錄
//創建文件管理器
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
//更改到待操作的目錄下
[fileManager changeCurrentDirectoryPath:[documentsDirectory stringByExpandingTildeInPath]];
//創建文件fileName文件名稱,contents文件的內容,如果開始沒有內容可以設置為nil,attributes文件的屬性,初始為nil
NSString * fileName = @"testFileNSFileManager.txt";
NSArray *array = [[NSArray alloc] initWithObjects:@"hello world",@"hello world1", @"hello world2",nil];
//下面是將數組類型轉換為NSData類型
NSMutableData *data = [[NSMutableData alloc] init];
for (int i = 0; i < [array count]; ++i ){
NSString *str = [array objectAtIndex:i];
NSData *temp = [str dataUsingEncoding:NSUTF8StringEncoding];
[data appendData:temp];
}
//注意contents參數的類型是NSData類型
[fileManager createFileAtPath:fileName contents:data attributes:nil];
4.5 刪除文件
接著上面的代碼就可以將剛新建的 testFileNSFileManager.txt文件刪除!
[fileManager removeItemAtPath:fileName error:nil];
4.6 混合數據的讀寫 請參看原文最後面的內容。
7. ios9.1 沙盒訪問限製造成mdict無法烤入字典,大家有解決辦法么
相比於iOS9來說,蘋果在iOS9.1中除了修復Bug、增加系統穩定性之外,還加入了一些新功能,主要包括新增150多種表情符號(全機型)、修復多任務卡頓、Live Photo自適應(6S/6S Plus),至於其它部分則是對系統原先Bug的修補。另外,最受用戶關注度的操作界面卡頓的問題也得到了修復,流暢度有明顯的提升。
本次iOS 9.1的更新體積在300MB左右,如果您是6/6plus還沒有升IOS9, 那麼請千萬不要升級,因為無論它優化的多好,都是為6S/6Splus准備的,而6/6plus的主配系統是IOS8,每代手機都是使用自己的主配系統才是最合適的,沒有之一!如果您已經升級了IOS9那麼可以升級IOS9.1因為同系列系統一般情況下,差距不會很大,升級了也無可厚非
我是做銀行理財的,一個月收益5%,手機上就可以操作,玩手機的同時還可以享受賺錢的樂趣!別人玩手機是無聊打發時間,我玩手機是賺錢,這才能更好地體現手機的價值!
8. 越獄後,iOS針對IPA的沙盒就失效了
iPhone開發之PXL格式程序開發 * January 20th, 2011 * 瑣碎 *PXL是國內廣泛使用的一種iOS程序安裝包,他只能安裝於破解版的iPhone/iPad等設備上。和官方的IPA格式相比,pxl格式的程序有他獨特的特點。1、PXL與IPA格式優缺點比較IPA作為蘋果官方的安裝包格式,顯然在先天上有他的優勢,他易於安裝和卸載,只要使用iTunes就可以進行安裝、同步和卸載,而其他第三方的助手類軟體一般都支持IPA格式。但是由於是官方的格式,所以存在沙盒特性的限制。也就是說,他只能訪問沙盒下的目錄。PXL作為國內應用相當廣泛的軟體,他也有自身的優勢。首先,他具有更強的文件目錄訪問范圍。由於PXL是安裝在破解過的機子之上,所以PXL軟體對實現對整個文件系統訪問,因此如果你想做些和系統相關的軟體,例如安裝其他軟體或者是修改系統配置,IPA是絕對做不到的。其次,他在安裝和卸載前後具有更強的靈活性。如果你想在安裝前做些准備工作,或者卸載時做些特殊的事情,可以通過PXL的安裝後和卸載前腳本來完成你的目的。第三,PXL程序可以獲得更高的許可權,可以通過一些手段,讓你的應用程序具有root的許可權。而PXL的缺點也是顯而易見的!他僅僅支持破解過的iOS設備。同時他也會失去IPA軟體所具備的一些特性。2、PXL軟體開發過程與IPA軟體開發過程的差異性PXL的開發過程和IPA的開發過程具有一些差異性,不了解這些差異性可能對你的軟體運行過程中有些影響。A.PXL可能會無法獲取Document、Library等IPA必定存在的目錄。在IPA格式的軟體中,軟體安裝後,他的目錄格式大概如下:XXXXXX(蘋果生成的GUID目錄)||____MyApp.app|____Document|____Library|____tmp|____xxxx(其他目錄)而PXL的軟體安裝在破解機後,他的目錄格式如下:/Applications||____MyApp.appB.PXL程序中是否可以使用Document、Libarary等目錄?答案是應該可以。為什麼是應該呢?因為這個可能和機器的破解情況相關。一般情況下,使用系統的API來獲取Document目錄,你將獲得的目錄是:/var/mobile/Document,同樣,Library會指向/var/mobile/Library。基本上的破解機上這些目錄都是存在的!(但是_並不保證_這些目錄一定存在,有非常小的概率遇到破解有問題的機器這些目錄不存在。)那麼使用這些目錄有什麼要注意的事項嗎?首先,所有pxl軟體的Document目錄都是指向同一個目錄/var/mobile/Document目錄,所以存在可能重名的危險!其次,軟體在被卸載的時候,你存在Document和Libary下的文件不會被刪除!C.PXL程序開發時推薦的數據保存方式?那麼在PXL的程序開發過程中,推薦使用什麼樣的方式來保存信息呢?一般而言,採用自己指定目錄的方式,你可以通過NSBundle來獲取你的app的路徑,在你的app目錄下建立一個你的數據存儲目錄(當然,可以打包的時候直接帶入,也可以直接放在你的app目錄下也行)。然後將你的數據存放在這個目錄底下。還有一種情況,就是很有可能你的程序既需要生成ipa,也需要生成pxl,所以你可能需要在程序中對這些情況進行適配。那麼這種情況你該怎麼處理呢?首先,代碼中應該盡量避免直接使用Document、Libarary這些目錄,在訪問這些目錄前,封裝一下。例如:NSString *getMyDocumentPath(){NSString *path = nil;if (isJailBreak){path = MyJailBreakPath; //破解版自定義的路徑}else{path = DocumentPath; //系統的Document路徑}}那麼應該用什麼方式來判斷是否jailBreak呢?一個方法是你打包之前,代碼里頭直接指定。那麼動態判定的方法呢?其實很簡單,你直接取訪問一個超出沙盒目錄的文件,如果你能訪問到,那麼他一定是jailBreak過的。例如:BOOL isJailBreak(){int res = access(」/var/mobile/Library/AddressBook/AddressBook.sqlitedb」, F_OK);if (res != 0)return NO;return YES;}
9. ios 怎麼進入當前app 的沙盒
你是iOS開發者吧! 前提是用ios模擬器,並在代碼中列印一下當前路徑,
NSLog(@"%@",NSHomeDirectory());
然後,就去按照路徑找吧!