Xcode6發(fā)布后,出現(xiàn)了很多的變動(dòng),功能性的變動(dòng),在這里不進(jìn)行過多的贅述,在WWDC上蘋果已經(jīng)進(jìn)行了講述,網(wǎng)上也有很多文章,這里要介紹的是一些不太容易發(fā)現(xiàn)的,但很重要的小地方。
1、Xcode6模擬器路徑的變更
在Xcode5和之前的版本中,Xcode的模擬器路徑為:/Users/username/Library/Application Support/iPhone? Simulator。在該文件夾下,可以查看到所有的模擬器版本,點(diǎn)進(jìn)去后,可查看應(yīng)用沙盒情況。
在開發(fā)中,建議將文件拖動(dòng)快捷路徑到Finder左側(cè)個(gè)人收藏下,可以方便打開查看應(yīng)用沙盒。
在Xcode6中,將模擬器的位置進(jìn)行了變更,地址如下:/Users/username/Library/Developer/CoreSimulator,打開后會(huì)發(fā)現(xiàn)如下情況:
在這里,蘋果對(duì)模擬器進(jìn)行了編碼處理,并不是以模擬器系統(tǒng)版本進(jìn)行的命名和分類,而是對(duì)Xcode6中所有的模擬器進(jìn)行的區(qū)分,里面的16個(gè)文件夾分別對(duì)應(yīng)的Xcode6中的16種模擬器 ,那如何根據(jù)這個(gè)看似亂碼的文件夾,判斷出是哪一款模擬器呢?
選中某個(gè)文件后,打開會(huì)看到一個(gè)名為data的文件夾,和device.plist的配置文件,打開device.plist的配置文件后,會(huì)看到模擬器的UDID、設(shè)備類型、系統(tǒng)版本、名稱等。通過這個(gè)可以知道模擬器的設(shè)備和系統(tǒng)版本。打開后,會(huì)發(fā)現(xiàn),前面的看似亂碼的文件名稱,其實(shí)就是模擬器的設(shè)備UDID,雖然從這里可以得到模擬器的UDID,蘋果也用它來進(jìn)行分類模擬器,但在實(shí)際的編程中,如果想最后發(fā)布到APP Store的話,還是放棄UDID吧,這也是蘋果比較霸道的一點(diǎn),當(dāng)然了也是在保護(hù)用戶隱私的情況下做出的。
2、應(yīng)用沙盒地址的變更
得到了模擬器路徑后,還是用很多的不同的,應(yīng)用的沙盒地址也和之前有所不同。
在Xcode5及之前的版本中,沙盒地址為如下:/Users/username/Library/Application Support/iP hone? Simulator/7.0.3/Applications,在Applications文加下,會(huì)找到應(yīng)用程序的沙盒。
在打開應(yīng)用沙盒后,會(huì)有應(yīng)用程序文件、Document文件夾、Library文件夾、tmp文件夾。至于這幾個(gè)文件夾的作用不在此做贅述。
在Xcode6中,應(yīng)用程序文件、Document文件夾、Library文件夾、tmp文件夾這四個(gè)文件放在了不同的目錄中。應(yīng)用程序文件路徑:/Users/username/Library/Developer/CoreSimulator/Devices/模擬器UDID/data/Containers/Bundle/,Application文件夾下;Document文件夾、Library文件夾、tmp文件夾路徑:/Users/username/Library/Developer/CoreSimulator/Devices/模擬器UDID/data/Containers/Data/,Application文件下。但是不幸的是,這兩個(gè)路徑打開后的文件名,還是經(jīng)過編碼過的,而且,同一個(gè)應(yīng)用中的應(yīng)用程序文件和D、L、t文件夾所在的文件夾的文件名是不同的。只能自己找。
3、NSUserDefault 文件存儲(chǔ)位置變更
NSUserDefault是iOS提供的本地化數(shù)據(jù)存儲(chǔ)方式,會(huì)在沙盒中自動(dòng)創(chuàng)建一個(gè).plist的配置文件,將數(shù)據(jù)保存起來,在讀取時(shí),以NSDictionary字典來進(jìn)行接收
在Xcode5及之前的版本中,具體的路徑為:/Users/shifengwei/Library/Application Support/iPhone Simulator/7.0.3/Applications/C9588981-3D82-49BC-92B8-F5BA72185629/Library,Preferences文件夾下,名稱為程序Bundle Identifier的plist文件。在刪除模擬器中的程序后,在Library文件夾下的plist文件會(huì)相應(yīng)的刪除。
在Xcode6中,程序?qū)κ褂肗SUserDefault方式創(chuàng)建的plist文件的位置進(jìn)行了更換,具體路徑為:/Users/username/Library/Developer/CoreSimulator/Devices/模擬器UDID/data/Library,Preferences文件夾下。
這里特別說一下,如果按照在Finder里打開的路勁來看,并不是這樣的,但通過 Finder,前往文件夾,通過該路徑查找是可以查到的。上述的路徑地址是通過查看Preferences文件夾的顯示簡(jiǎn)介獲得的。
通過上述的路徑可以看出,通過NSUserDefault創(chuàng)建的plist文件夾還是在Library文件下,但不同的是,真正存放的位置變了,成了在模擬器的資料庫文件夾下,這樣的改變所產(chǎn)生的變化就是,當(dāng)我們?cè)趧h除模擬器中的應(yīng)用程序后,plist文件還是會(huì)保留,并不會(huì)刪除。
那么,既然模擬器中的位置變了,那升級(jí)到iOS8后,在這方面有什么不同呢?下面就說說在在真機(jī)中調(diào)試的不同。
1、Organizer中,在Xcode5中,是Devices、Projects、Archives三欄,而在Xcode6中,單獨(dú)將Devices拿了出來,成了和Organizer平級(jí)的,在Xcode菜單欄,Window下。如果了解過Xcode從4.X升級(jí)到5時(shí),就會(huì)知道,Organizer在那個(gè)時(shí)候也變更過,從原來的四欄變成了三欄,將幫助文檔移除了。
2、在進(jìn)行真機(jī)調(diào)試時(shí),會(huì)打開真機(jī)中應(yīng)用程序的沙盒,進(jìn)行查看,在Xcode中,? 打開Devices的Application中,可以下載下來應(yīng)用程序的沙盒,通過右擊顯示包內(nèi)容來查看沙盒的信息。但是在iOS8和iOS7及之前出現(xiàn)了不同。
上圖為同一款應(yīng)用在不同的系統(tǒng)中所表現(xiàn)的,左圖為iOS8下,下載下來的沙盒內(nèi)容,右圖為iOS7.0.4下,下載下來的沙盒內(nèi)容,很顯然,在iOS8下,通過Devices下載的沙盒內(nèi)容無法查看沙盒里面的內(nèi)容。
我們通過第三方的軟件,在這里使用的是iFunBox,找到應(yīng)用程序后,打開發(fā)現(xiàn)可以查看到沙盒的內(nèi)容,復(fù)制到本地后,發(fā)現(xiàn),原本的5個(gè)文件,只有3個(gè),也就是Document文件夾、Library文件夾、tmp文件夾三個(gè)。
這里特別說一下,上述提到過的,在模擬器中,通過NSUserDefault自動(dòng)創(chuàng)建的plist文件,在刪除軟件后,還會(huì)保留,但在真機(jī)中,也是會(huì)刪除的,相應(yīng)的plist文件的路徑到了通過導(dǎo)出的Library文件夾下的Preferences文件夾下,刪除應(yīng)用程序后,不會(huì)保留。這應(yīng)該算是一個(gè)真機(jī)和模擬器中的不同。
這個(gè)不同會(huì)造成一種情況,那是否還可以使用NSUserDefault?就筆者目前來看,還不至于廢棄NSUserDefault,畢竟它只是在模擬器中會(huì)出現(xiàn)刪除應(yīng)用保留的情況,在真機(jī)中不會(huì),而且NSUserDefault在開發(fā)中,作為數(shù)據(jù)持久化,在保存數(shù)據(jù)時(shí),還是很好用的。當(dāng)然了,也有開發(fā)者會(huì)不適應(yīng)這種情況,擔(dān)心在真機(jī)中會(huì)出現(xiàn),如果有開發(fā)者認(rèn)為不適應(yīng)的話,可以自己創(chuàng)建一個(gè)plist文件在沙盒中,代替,但是如果說應(yīng)用中使用的NSUserDefault比較多的話,不建議這樣,畢竟蘋果封裝的NSUserDefault還是很好用的。可以在模擬器刪除文件后,在保存plist文件的文件夾下,將plist文件刪除即可,多個(gè)步驟而已,至少目前來看,在真機(jī)中還是和之前一樣的。
當(dāng)然,在iOS中,除了NSUserDefault會(huì)系統(tǒng)自動(dòng)生成文件進(jìn)行數(shù)據(jù)保存外,歸檔也是一樣的,由于筆者沒有進(jìn)行測(cè)試,為了避免誤導(dǎo),這里就不說了,待測(cè)試后,進(jìn)行總結(jié)發(fā)布。
PS:最后補(bǔ)充一下,打開或關(guān)閉Mac的隱藏文件的命令。
打開Mac隱藏文件命令:defaults write com.apple.finder AppleShowAllFiles -bool true
關(guān)閉Mac隱藏文件命令:defaults write com.apple.finder AppleShowAllFiles -bool false
方法:在終端中,輸入該命令,回車,然后在強(qiáng)制退出中,重啟Finder,即可。