上传时出现错误:Application failed codesign verification.Applicationfailed codesign verification. The signature was invalid, contains disallowedentitlements, or it was not signed with an iPhone Distribution Certificate.
解决办法:
可以先看看iTunesConnect_DeveloperGuide_CN.pdf,iTunes_Store_Transporter_Quick_Start_Guide_v1.pdf,都可以在iTunes Connect上下载到。
前提是,你已经有了APP ID,并且也已经交了$99美元给苹果,成了苹果的开发者一员,下载了苹果给的相应的证书,并导入到了Keychain Access了(我不太清楚如何做,别人弄好了,我接手继续搞的)。我看了我的Keychain Access中有三个证书:Apple Development IOS Push Services: com.域名.pushappid; iPhone Developer:英文姓名 (唯一编号);iPhone Distribution:公司英文名。
1.在iTunes Connect上登陆,并进入 Manage Your Application页面,创建你的app的以及其他的信息,这些都比较简单,也很容易就填好了,唯一注意的是Bundle ID 这个要注意一般为:com.company domain name.xxx,其实只要你的每个app的Bundle ID不重复就行了,注意记住这个ID,后面要用到。信息都填好了,然后你的程序的状态变为Waiting For Upload了,才说明你的程序信息都填对了,可以上传代码文件了。
2.据iTunes Connect上说,要想上传iPhone app到Store中,目前要使用Application Loader(在MAC机器的Developer/Applications/Utilities/Application Loader.app,你可以在iTunes Connect中下载Loader软件,不过只有最新版(2.8)的哦,只能运行在MAC的10.7.*版本之后,如果是10.6.8或更早的版本,就必须下载Application Loader的早一些的版本,我找到的是2.5.1,否则安装不上);我发现其实也可以用 XCode集成的Organizer(在XCode软件的Window菜单下能看到)。
3.在Xcode中开发程序,设置.plist(即程序工程名-Info.plist)文件的一些键值,值得治愈的键值对有:Bundle display name, Bundle name这两个必须不能是中文名字,Bundle identifier的值必须是与上面说的Bundle ID是一样的。
4.在Xcode中鼠标双击你的程序的工程文件,在弹出窗口中设置一些内容,主要是Code Signing-〉Code Signing Identify的值,设成iPhone Distribution:xxxxxx。如果此时无法build通过先不着急,继续看。
5.然后在Xco在Xcode中de中Build菜单下点Build (release出来), 到硬盘上找到release出来的响应app文件,将该app文件拖到iTunes窗口的Apps中,等上一会你可以在Apps列表中看到你的程序了,然后选中你的程序拖到硬盘中,就生成了相应的.ipa文件了,该文件可以通过iTunes以及其他软件导到iPhone手机了进行安装运行了。
6.此时在Xcode中的Build菜单,点Build and Achive(或者直接在Window菜单点Organize),打开Organizer,点击Validate,通过弹出的窗口一路选择,如果最后给出的是错误提示(很奇怪我用的是XCode3.2.8就爆出错误,如果我用XCode4.2,竟然不报错,说上传成功,真奇怪),当然你用Application Loader一样会报错的,报的错大概是Application failed codesign verification.Applicationfailed codesign verification. The signature was invalid, contains disallowedentitlements, or it was not signed with an iPhone Distribution Certificate.这是什么意思,搞了半天也没搞懂。在网上搜了几天也没结果,是了不少办法依然如此,但估计应该是跟证书有关。在iTunes Connect上已经创建了要上传程序的基本信息以及Bundle ID了,那么上传时就是靠的这个Bundle ID将程序信息以上传的程序对应起来了,当然这其中用到了itunes(必须把程序先脱放到Apps中)以及Keychain Access(上传时XCode要验证Distribution证书),你会说证书已经有了啊。
7.打开网站:https://developer.apple.com/。点击“IOS Dev Center”,进入IOS开发中心,点击“Log in”,输入Apple ID和密码,登陆到IOS开发中心,在“iOS Developer Progtam”下点击链接“iOS Provisioning Portal”,进入iOS Provisioning Portal页面,点击链接“Provisioning”,然后点击“Distribution”面板,点击“New Profile”,添加新的Profile,这个Profile(格式为 App ID. BundleID)就是包含上面我们说的Bundle ID。这样就为你的新的程序加到了已有的Distribution 证书中了。
8.在XCode中Build你的程序,执行Build and Achive(或者直接在Window菜单点Organize,点Validate),打开Organizer,点击Validate,就不会出现签名验证错误问题了。点击“Submit”,等待一会,可能会出现几条错误信息,其中一个是Unableto authenticate the package: xxxxxxxxx.itmsp. The file name penny xxxxxxxxx.app.ZIPin the package contains invalid characters. The valid characters are: A-Z, a_z,0-9, dash, period.这说明你的在.plist中的Bundle name 设置成中文名称了,改成英文名称再Submit,你会发现,正在提交程序中,恭喜你你的长须终于再说上传了,等待其上传结束,你再等陆iTunes Connect会发现程序的状态变为 Waiting For Review了,审核中,等着吧。
9.刚才把Bundle name改成了英文,我的iPhone客户端想显示中文名字啊,怎么办?在程序的Localizable.strings文件中设置CFBundleDisplayName=”中文名字”,或许可以直接在.plist中设置Bundle display name为中文名字(我还没来急得试,就sbumit成功了,也改不成了)。