Xcode真机调试错误

      
       最近Xcode和IOS的SDK版本升级都比较频繁,为了最快学习新版本的IOS SDK的新特性和掌握Xcode的新功能,所以本人的开发环境也一直在紧跟最新版本。最新使用的是Xcode4.6版本,IOS SDK6.1。今天在Demo工程的真机调试过程中遇到以下错误:
Could not change executable permissions on the application.
    弹出的错误对话框如下



       因项目的时间和任务分工,自己没有很熟练的掌握Xcode的真机联调的流程和细节,一直在使用现成的开发环境,平时没有遇到过什么关于Xcode调试的问题,今天突然遇到了这个莫名其妙的问题,因提示信息有限,所以上网查找了一下。原因大致是,两个Bundle identifier 相同的App在真机上是无法运行的,解决的办法是将真机上已存在的Bundle identifier重名的App工程删掉,然后重新连接真机运行。

于是按照解决办法,将真机上使用形同Bundle identifier名称的App删除,再次运行新工程,果然一切顺利,真机联调成功。

在Stackoverfolow上有一篇该问题的讨论描述了该问题的由来和解决方案。


Bundle identifier的生成

    以名为MyApp的工程为例来简单说明下Bundle identifier的生成过程,使用Xcode新建MyApp工程,如



    我们可以看到Bundle Identifier 是一个由Company Identifier+Product Name组成的字符串;点击Next继续直至新建工程完毕,在新工程的Xcode界面中,我们可以看到Bundle Identifier的位置



     打开MyApp工程的项目列表,找到其Info.plist文件。Bundle Identifier的位置





     我们知道Info.plist是一种XML格式的文本文件,现在我们以源代码方式打开该文件



     我们可以看到Bundle Identifier的真是的XML格式如下

<key>CFBundleIdentifier</key>
<string>com.test.app.${PRODUCT_NAME:rfc1034identifier}</string>
     此处验证了我们之前提到的Bundle Identifier为string类型的说法。其实Bundle Identifier在IOS SDK中的实际配置文件的表示为 CFBundleIdentifier ,与实际的Bundle Identifier名称是一对key-value组合

CFBundleIdentifier 作用
     

     根据IOS SDK手册说明,

     CFBundleIdentifier在IOS或OS X中标识了唯一的集合(bundle).系统中每个不同的app或程序包都必须有一个唯一的bundle ID。该ID是一个字符串类型,系统通过这个唯一的字符串来标定你的app。例如,系统中的偏好设置可以使用这个字符串标定你得app来指定用户设置的偏好值。加载服务程序(Launch Services)使用这个ID来确定它标定的app是否支持打开某些特殊类型的文件。在IOS中,bundle identifier还用来验证app签名的合法性。
      bundle ID字符串必须是一个统一类型标识符(uniform type identifier,简称UTI),并且只能包含"A-Z","a-z","0-9","-","."这些字符。bundle ID字符串应该以反响DNS格式加以组织,如果你得公司域名时Ajax.com,并且你创建的APP的名称为Hello,那么你可以指定字符串"com.Ajax,Hello"作为你的APP的bundle identifier 。

     至此,我们亦可以获知Xcode中所创建创建app默认bundle identifier格式的由来。以及Bundle Identifier的用处了。

注:描述于IOS SDK6.1下

转载于:https://my.oschina.net/hmj/blog/111246

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值