App Store 上架之路
首先苹果开发者中心中的Certificates, Identifiers & Profiles这里就不再赘述了,关于这方面的教程网上到处都是,这里从iTunes Connect开始说起:
- 1.打开https://itunesconnect.apple.com/ 并登陆苹果开发这账号;
- 2.点击我的App,进入后左上角点击新建 iOS App,之后的内容按提示依次输入;
- 3.到达“准备提交”这步时,此时这个构建版本还没有生成,我们先把基本信息填写完毕,然后再进入Xcode中把项目打包发送到过来。注意:填写完一定要点击右上角的保存。
Xcode打包项目上传中遇到的一些常见问题
原文地址:http://www.jianshu.com/p/491e5fdd54a2
iOS app上架是很坑爹的,在第一次上架过程中,博主一下遇到了N多的报错,当时博主心里是崩溃的。在崩溃过后,博主开始了漫长的谷歌生活,最后艰辛的上架了,现在博主为了给广大的iOS开发者提供一些问题的解决方法,希望能帮助大家,加快大家的工作效率,主要是可以不用加班,说多了都是泪。。。
问题一:
这个问题就是你Xcode上设置的bundleID与证书上的bundleID不一致导致的,把他们修改一样都好了。
问题二:
这个问题有很多的答案,我只提供一个大多数能解决方法
1.在钥匙串访问>钥匙串修改Apple Worldwide Developer Relations Certification Authority证书:右键显示简介调整"总是信任" 为 "系统默认"。
2.删除已过期的Apple Worldwide Developer Relations Certification Authority证书,并下载新的Apple Worldwide Developer Relations Certification Authority证书,双击安装。
3.删除相关的 provisioning profiles,然后重新添加。(Xcode中的证书配置文件路径:~/Library/MobileDevice/Provisioning Profiles)
问题三:
Getting ITMS-4238 “Redundant Binary Upload” error no mater what I change the build version or app version tobe higher
这个是已经上传了同一个版本的APP了,不能再继续上传,如果需要重新上传,就需要改版本号。
问题四:
iPhone App Submitting - Error ITMS-90171 Invalid Bundle Structure Can't Contain Standalone Executables
这个是引入的第三方framework所带的资源包有问题,有可能是bundle里info.plist使用到的资源在bundle里没有
问题五:
ERROR ITMS-90474: "Bundle Invalid. iPad Multitasking support requires there orientations: 'UIInterfaceOrientationPortrait,UIIinterfaceOrientationPortraitUpsideDown,UIInterfaceOrientationLandscapeLeft,UIInterfaceOrientationLandscapeRight'. Found 'UIInterfaceOrientationPortrait' in bundle.
在 TARGETS > iOS > General > Deployment Info 勾选 “Requires full screen”
问题六:
ERROR ITMS-90542: "Invalid CFBundleSupportedPlatforms value. The key 'CFBundleSupportedPlatforms' in the Info.plist file in bundle 'Payload/PgapIos.app/GoogleMaps.bundle' contains an invalid value '( "iPhoneSimulator" )'.
这个是编译bundle的时候,是用模拟器来编译的,解决方法是:在编译bundle的时候选择真机
ERROR ITMS-90086: Missing 64-bit support. Submission fails with error on submit app on iTunes
在 build settings 中的Valid Architectures, 添加arm64让APP支持 64位的机器。XCode7不会有这种情况
问题七:
ERROR ITMS-90535 Unexpected CFBundleExecutable
在我这里是因为我的bundle里是生成了一个可执行文件,从新做一个bundle文件,注意bundle项目Build Settings 中的Mach-o Type 要选择 Static Library。如果是第三方的就把bundle里info.plist的 Executable file字段删除掉(我自己的bundle如果删除,上传的时候会提示bundle是损坏的),然后重新打包。

问题八:
ERROR ITMS-90034: Missing or invalid signature
这个其实还是因为bundle里有个可执行文件,在打包的时候没能进行签名导致的。
问题九:
ERROR ITMS-90096:"You binary is not optimized for iPhone 5....".
在工程里的Images.xcassets添加并设置LaunchImage对解决ERROR ITMS-90096根本不会起到任何作用,需要单独添加针对iPhone 5的载入图片。关键点有三项:1、图片的名称必须叫Default-568.png。2、必须把图片放在工程的根目录下。3、图片尺寸必须是320*568。
然后在plist中添加

问题十:
使用Application Loader 上传ipa出现的错误提示“application loader上传出错 生成的API分析文件太大”解决方法:解决办法就是修改Xcode里面的Build

问题十一:
在Archive项目 时,出现了“Your build settings specify a provisioning profile with the UUID “487F3EAC-05FB-4A2A-9EA0-31F1F35760EB”, however, no such provisioning profile was found”的出错。一直提示指定UUID的provisioning profile找不到,感觉很奇怪。明明自己的provisioning profile是刚下载好的,并且全是新安装。于是通过谷歌找到了答案。
这里所说的就是要通过修改你的项目的.xcodeproj文件来解决上述的错误。
1.找到项目中的**.xcodeproj文件,点击右键,show package contents(打开包内容)。
2.打开后找到project.pbxproj文件,用文本编辑器打开。其实就是右键,点击open就好了。
3.打开这个文件后,按command+F,在这个文件中查找“PROVISIONING_PROFILE",找到和这个“
PROVISIONING_PROFILE="487F3EAC-05FB-4A2A-9EA0-31F1F35760EB";"PROVISIONING_PROFILE[sdk=iphoneos*]"="487F3EAC-05FB-4A2A-9EA0-31F1F35760EB";”类似的都删除。(注意:只删除双引号里面的487F3EAC-05FB-4A2A-9EA0-31F1F35760EB就可以了)
问题十二:
在要上传的包上右键[Show in Finder]然后依次展开[xxxx.xcarchive][Products][Applications][xxxx] // xxxx–项目名
然后搜索所有的info.plist
找到是哪个plist含有[CFBundleSupportedPlatforms]属性,看是那个三方库包含的这个plist,然后到Xcode里面删除该属性。
我这里是因为环信的包中的info.plist文件中的CFBundleSupportedPlatforms字段和其对应的值导致了,找到其plist文件,移出对应的字段和值

经过一番折腾好不容易把打包好的APP上传给了App Store,结果不到两分钟就收到了一封邮件
Dear developer,
We have discovered one or more issues with your recent delivery for "我来-给你的生活加点料". To process your delivery, the following issues must be corrected:
This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data.
This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSMicrophoneUsageDescription key with a string value explaining to the user how the app uses this data.
This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.
Once these issues have been corrected, you can then redeliver the corrected binary.
Regards,
The App Store team
解决方案
这是因为iOS10之后权限的问题导致崩溃。
解决方法:在项目中找到info.plist文件,右击有个 Open As,以Source Code 的形式打开,如图:
打开后添加权限代码就可以了,添加什么权限代码可查看报错日志,里面说缺少NSPhotoLibraryUsageDescription这个权限添加如下代码既可以了,以后此类问题都可以这样解决。
下面其他的部分权限代码。
- 然后再次打包上传,结果又出现了新的问题 ERROR ITMS-4238: "Redundant Binary Upload. There already exists a binary upload with build version '1.0' for train '1.0'" at SoftwareAssets/PreReleaseSoftwareAsset
出现这个问题通常是因为之前上传过app但是没使用,第二次上传build版本冲突。修改软件的build版本大于之前版本即可(工程-属性-General)。现在的ITC提交app,APP版本要和ITC设置的版本相同,如果提交多次,则需要增加build版本好以便区分。
- 修改版本号为1.0.1之后再次上传顺利成功。
- 来到itunesconnect ,选择上传好的构建版本,此时,这里会出现之前两次提交的版本,分别是1.0和1.0.1,选择1.0.1,先保存,然后点击“提交以供审核”
- 三项全部选择否,结果提交失败,提示:iOS提交审核:您的 App 正在使用广告标识符 (IDFA)
解决方法如下:
如果出现上图所示,如果你选择了否:

- 方案一:重新下载xcode
如果你的xcode不是最新版本的,建议下载最新版本的。重新打包后,再次提交审核。
如果你的xcode不是正规渠道下载的,建议从苹果官方下载。
有朋友尝试过方案一,问题得到解决。如果解决不了,还有方案二。
- 方案二:检测哪里用到IDFA
首先cd到你的工程目录下,然后执行命令:
grep -r advertisingIdentifier
果然找到了罪魁祸首,原来是SinaWeiboSDK/libWeiboSDK.a

ios9之后新浪微博分享可使用的前提是加入ADSupport.framework,打包提交后一直报您的 App 正在使用广告标识符 (IDFA)。您必须先提供关于 IDFA 的使用信息或将其从app中移除,再上传二进制文件。
找到了源头,那么接下来怎么做就简单了。
承认使用了IDFA,然后选择相应的选项。
移除SinaWeiboSDK/libWeiboSDK.a,分享还是可以成功的。
最后我先是尝试放弃新浪微博分享功能,重新上传打包程序,结果到这一步依然如此,检查Xcode版本也是最新,无奈之下,智能妥协,选择了是。
最后根据如下选项进行了选择,现在提交审核成功,正在等待审核中。 打包提交后出现:您的app正在使用广告标识符(IDFA)。
1、在 App 内投放广告
2、将此 App 安装归因于先前投放的特定广告
3、将此 App 中发生的操作归因于先前投放的特定广告
4、对使用广告标识符做确认
像我这种应用中没有集成广告,但是有第三方工具追踪广告的行为,需要勾选2、3、4这几项,成功通过提交,通过审核。
如果你的应用中只集成了广告,没有追踪广告带来的行为,需要勾选1、4。
如果你的应用中既集成了广告,又追踪广告带来的行为的情况,全部勾选。
附:权限说明
麦克风权限:Privacy - Microphone Usage Description 是否允许此App使用你的麦克风?
相机权限: Privacy - Camera Usage Description 是否允许此App使用你的相机?
相册权限: Privacy - Photo Library Usage Description 是否允许此App访问你的媒体资料库?
通讯录权限: Privacy - Contacts Usage Description 是否允许此App访问你的通讯录?
蓝牙权限:Privacy - Bluetooth Peripheral Usage Description 是否许允此App使用蓝牙?
语音转文字权限:Privacy - Speech Recognition Usage Description 是否允许此App使用语音识别?
日历权限:Privacy - Calendars Usage Description 是否允许此App使用日历?
定位权限:Privacy - Location When In Use Usage Description 我们需要通过您的地理位置信息获取您周边的相关数据
定位权限: Privacy - Location Always Usage Description 我们需要通过您的地理位置信息获取您周边的相关数据
注意:第二个定位权限,如果仅是需要一般的定位功能,填上第一个定位权限就可以了,加上第二个定位权限审核会遭拒,亲身体验。