Xcode6公布后,出现了非常多的变动,功能性的变动,在这里不进行过多的赘述,在WWDC上苹果已经进行了讲述,网上也有非常多文章,这里要介绍的是一些不太easy发现的,但非常重要的小地方。

         1、Xcode6模拟器路径的变更

          在Xcode5和之前的版本号中,Xcode的模拟器路径为:/Users/username/Library/Application Support/iPhone  Simulator。在该目录下,能够查看到全部的模拟器版本号,点进去后,可查看应用沙盒情况。

在开发中,建议将文件拖动快捷路径到Finder左側个人收藏下,能够方便打开查看应用沙盒。

        在Xcode6中,将模拟器的位置进行了变更,地址例如以下:/Users/username/Library/Developer/CoreSimulator,打开后会发现例如以下情况:

        在这里,苹果对模拟器进行了编码处理,并非以模拟器系统版本号进行的命名和分类,而是对Xcode6中全部的模拟器进行的区分,里面的16个目录分别相应的Xcode6中的16种模拟器 ,那怎样依据这个看似乱码的目录,推断出是哪一款模拟器呢? 

       选中某个文件后,打开会看到一个名为data的目录,和device.plist的配置文件,打开device.plist的配置文件后,会看到模拟器的UDID、设备类型、系统版本号、名称等。通过这个能够知道模拟器的设备和系统版本号。打开后,会发现,前面的看似乱码的文件名,事实上就是模拟器的设备UDID,尽管从这里能够得到模拟器的UDID,苹果也用它来进行分类模拟器,但在实际的编程中,假设想最后公布到APP Store的话,还是放弃UDID吧,这也是苹果比較霸道的一点,当然了也是在保护用户隐私的情况下做出的。 

         2、应用沙盒地址的变更

        得到了模拟器路径后,还是用非常多的不同的,应用的沙盒地址也和之前有所不同。

       在Xcode5及之前的版本号中,沙盒地址为例如以下:/Users/username/Library/Application Support/iP hone  Simulator/7.0.3/Applications,在Applications文加下,会找到应用程序的沙盒。

       在打开应用沙盒后,会有应用程序文件、Document目录、Library目录、tmp目录。至于这几个目录的作用不在此做赘述。

       在Xcode6中,应用程序文件、Document目录、Library目录、tmp目录这四个文件放在了不同的目录中。应用程序文件路径:/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文件下。可是不幸的是,这两个路径打开后的文件名称,还是经过编码过的,并且,同一个应用中的应用程序文件和D、L、t目录所在的目录的文件名称是不同的。仅仅能自己找。 

       3、NSUserDefault 文件存储位置变更

       NSUserDefault是iOS提供的本地化数据存储方式,会在沙盒中自己主动创建一个.plist的配置文件,将数据保存起来,在读取时,以NSDictionary字典来进行接收 

       在Xcode5及之前的版本号中,详细的路径为:/Users/shifengwei/Library/Application Support/iPhone Simulator/7.0.3/Applications/C9588981-3D82-49BC-92B8-F5BA72185629/Library,Preferences目录下,名称为程序Bundle Identifier的plist文件。在删除模拟器中的程序后,在Library目录下的plist文件会对应的删除。

       在Xcode6中,程序对使用NSUserDefault方式创建的plist文件的位置进行了更换,详细路径为:/Users/username/Library/Developer/CoreSimulator/Devices/模拟器UDID/data/Library,Preferences目录下。

       这里特别说一下,假设依照在Finder里打开的路劲来看,并非这种,但通过 Finder,前往目录,通过该路径查找是能够查到的。上述的路径地址是通过查看Preferences目录的显示简单介绍获得的。

        通过上述的路径能够看出,通过NSUserDefault创建的plist目录还是在Library文件下,但不同的是,真正存放的位置变了,成了在模拟器的资料库目录下,这种改变所产生的变化就是,当我们在删除模拟器中的应用程序后,plist文件还是会保留,并不会删除。

       那么,既然模拟器中的位置变了,那升级到iOS8后,在这方面有什么不同呢?以下就说说在在真机中调试的不同。

        1、Organizer中,在Xcode5中,是Devices、Projects、Archives三栏,而在Xcode6中,单独将Devices拿了出来,成了和Organizer平级的,在Xcode菜单条,Window下。假设了解过Xcode从4.X升级到5时,就会知道,Organizer在那个时候也变更过,从原来的四栏变成了三栏,将帮助文档移除了。

       2、在进行真机调试时,会打开真机中应用程序的沙盒,进行查看,在Xcode中,  打开Devices的Application中,能够下载下来应用程序的沙盒,通过右击显示包内容来查看沙盒的信息。可是在iOS8和iOS7及之前出现了不同。

       上图为同一款应用在不同的系统中所表现的,左图为iOS8下,下载下来的沙盒内容,右图为iOS7.0.4下,下载下来的沙盒内容,非常显然,在iOS8下,通过Devices下载的沙盒内容无法查看沙盒里面的内容。 

                我们通过第三方的软件,在这里使用的是iFunBox,找到应用程序后,打开发现能够查看到沙盒的内容,拷贝到本地后,发现,原本的5个文件,仅仅有3个,也就是Document目录、Library目录、tmp目录三个。

     这里特别说一下,上述提到过的,在模拟器中,通过NSUserDefault自己主动创建的plist文件,在删除软件后,还会保留,但在真机中,也是会删除的,对应的plist文件的路径到了通过导出的Library目录下的Preferences目录下,删除应用程序后,不会保留。这应该算是一个真机和模拟器中的不同。

       这个不同会造成一种情况,那是否还能够使用NSUserDefault?就笔者眼下来看,还不至于废弃NSUserDefault,毕竟它仅仅是在模拟器中会出现删除应用保留的情况,在真机中不会,并且NSUserDefault在开发中,作为数据持久化,在保存数据时,还是非常好用的。当然了,也有开发人员会不适应这样的情况,操心在真机中会出现,假设有开发人员觉得不适应的话,能够自己创建一个plist文件在沙盒中,取代,可是假设说应用中使用的NSUserDefault比較多的话,不建议这样,毕竟苹果封装的NSUserDefault还是非常好用的。能够在模拟器删除文件后,在保存plist文件的目录下,将plist文件删除就可以,多个步骤而已,至少眼下来看,在真机中还是和之前一样的。

       当然,在iOS中,除了NSUserDefault会系统自己主动生成文件进行数据保存外,归档也是一样的,因为笔者没有进行測试,为了避免误导,这里就不说了,待測试后,进行总结公布。



PS:最后补充一下,打开或关闭Mac的隐藏文件的命令。

打开Mac隐藏文件命令:defaults write com.apple.finder AppleShowAllFiles -bool true

关闭Mac隐藏文件命令:defaults write com.apple.finder AppleShowAllFiles -bool false

方法:在终端中,输入该命令,回车,然后在强制退出中,重新启动Finder,就可以。

Xcode6 模拟器路径的更多相关文章

  1. 【转】Xcode6 模拟器路径

    原文网址:http://www.cocoachina.com/bbs/read.php?tid-231024.html Xcode6发布后,出现了很多的变动,功能性的变动,在这里不进行过多的赘述,在W ...

  2. Xcode6.1 模拟器路径

    Xcode 5的iOS模拟器的应用的目录是在~/Library/Application Support/iPhone Simulator/<iOS_Version>/Application ...

  3. Xcode 7.3.1的模拟器路径

    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Core ...

  4. Xcode6:模拟器消失了?

    今天打开Xcode,选择模拟器时发现只剩下了“iPhone 5”和“iPhone 5s”,原来什么“iPad Air”,“iPhone 4s”的都哪里去了?丢了? 别着急,依次打开“Xcode-> ...

  5. Android开发2021.3.9日【模拟器路径】【外观字体】【简单快捷键】

    一. 1.模拟器存储路径 D:\Android\SDK\platforms(在本人的dell上) 2.使用软件 Android Studio4.2 3.注意事项 (1)修改JDK的路径为自己下载的JD ...

  6. Xcode 6 模拟器路径

    原文地址:http://leancodingnow.com/xcode-6-simulator-folder/ 本文主要介绍一下Xcode 6的iOS模拟器的应用目录的变化. Xcode 5的iOS模 ...

  7. Xcode6 模拟器不显示键盘

    在学习加法计算器时,程序运行后发现点击模拟器上的输入框时有时候键盘可以弹出来,有时候又弹不出来. 网上查询结果只需要在模拟器的菜单中找到hardware -> keyboard -> 取消 ...

  8. ios 查看模拟器路径以及应用的文件夹

    模拟器文件查看 好,这个时候选择往模拟器上面调试程序: 运行模拟器: 打开Finder,按住option,在菜单栏中选择“前往”->“资源库” 如果没发现资源库,则使用终端 命令行输入  ope ...

  9. Xcode6模拟器时BUG导致键盘无法弹出

    Xcode 6.X版本可能会出现虚拟键盘无法调出,并在控制台出现如下提示:Can't find keyplane that supports type 5 for keyboard iPhone-Po ...

随机推荐

  1. 洛谷P1734 最大约数和

    题目描述 选取和不超过S的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大. 输入输出格式 输入格式: 输入一个正整数S. 输出格式: 输出最大的约数之和. 输入输出样例 输入样例#1: 复 ...

  2. linux创建新用户并给予root权限

    root比windows的系统管理员的能力更大,足以把整个系统的大部分文件删掉,导致系统完全毁坏,不能再次使用.所以,用root进行不当的操作是相当危险的,轻微的可以死机,严重的甚至不能开机.所以,在 ...

  3. 关于搭建Session服务器(转载)

    Session服务器配置指南与使用经验 一.摘要 所有Web程序都会使用Session保存数据. 使用独立的Session服务器可以解决负载均衡场景中的Session共享问题.本文介绍.NET平台下建 ...

  4. Unity实现发送QQ邮件功能

    闲来无聊,用Unity简单实现了一个发送邮件的功能,希望与大家互相交流互相进步,大神勿喷,测试的是QQ邮件用到的是MailMessage类和SmtpClient类首先如果发送方使用的是个人QQ邮箱账号 ...

  5. HDU1203 I NEED A OFFER! 【贪心】

    I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  6. python缩进报错

    1.这个错误应该已经好久了:也应该熟悉了才对 IndentationError: unexpected indent python 缩进错误:意外缩进Python 但今天的问题有点特殊,我想在程序中间 ...

  7. input表单验证(全面)

    1.英文字母 1 <script type="text/javascript"> 2 //验证只能是字母 3 function checkZm(zm){ 4 var z ...

  8. Python数据结构同Json类型数据相互转换的用法

    在做Python接口自动化的时候,经常要用到Python数据结构同Json类型数据相互转换来供我们做进一步的验证提供数据,在此做个记录和总结 Python数据结构同Json类型数据相互转换的函数有:j ...

  9. C# SocketAsyncEventArgs类

    Namespace:System.Net.Sockets Assemblies:System.Net.Sockets.dll, System.dll, netstandard.dll (Represe ...

  10. Android 网络图片Url 转 Bitmap

    注意:该方法必须要在子线程中调用,因为涉及网络请求 public Bitmap getBitmap(String url) { Bitmap bm = null; try { URL iconUrl ...