前言:各类证书生产就不赘诉
公司或个人开发者证书与企业开发者证书的申请和发布不同之处在于用企业账号申请的证书不需要添加设备的UUID进证书里面,而其他账号申请的证书需要添设备的UUID,设备才可以使用。
开发(Development)证书用于测试环境下使用,可以直接安装到手机上(不用提交到Appstore),但一个描述文件最多只能绑定100台设备(因此通过这种证书正式发布应用是行不通的)。
打包测试iPa 选中Product-Archive(注意选择前把各种断点去掉)
证书的使用
如果开发者B,登录开发者账号,下载证书(cer文件)运行,只有证书没有私钥,是不能正常使用的。所以如果有新同事加入到开发组的时候,应该从本地钥匙串中选择证书,一定要记得展开证书那一条显示出私钥并将两行都选中,右键导出2项,输入密码之后就生成p12文件(包含证书和私钥)给同事。
另外可以给同事一份描述文件(Provisioning Profiles),用于本地开发识别测试设备。
需要强调一点,证书和项目关系其实并不大,证书一般有效期只有一年,当证书过期后,只需要重新生成一份证书,上传到开发者账号
就行,同时因为原有证书过期,需要重新生成Provisioning Profiles
文件。然后给同事们最新的p12文件和Provisioning Profiles文件就行
所以开发者账号
中的证书,配置文件是可以放心操作的(比如误删了,或者找不到证书私钥了)
·
证书过期/即将过期
疑问一:证书过期了,会影响到 AppStore 上面的应用吗?
答:证书过期不会影响已上架 AppStore 应用,但是推送会出问题,更新推送证书也不用下架重新发布,可以重新生成,只要保证 developer.apple.com 中那个 APP ID 的推送证书和推送服务器上的一致即可。但是账号欠费的话应用会被下架。
疑问二:证书过期了/即将过期怎么办?
答:首先,打开密钥中心,生成一个CSR(证书请求)。然后,到Apple Center把证书revoke,然后新建一个,新建的将会默认是刚刚revoke的证书的所有设置的。把下载回来的证书导出一份p12格式的保存起来(因为如果其他人需要的时候,只能跟你拿了,在Apple Center下载的用不了的。原因是还需要你电脑的密钥)然后去provision profile edit 一下,从新下载,替换掉原来的。你就可以继续开发了。不需要提交新 App 到 AppStore。
👉官方资料
Provisioning Profiles 描述文件
在这里,我引用别人的一段话,因为觉得写得很喜感,但又很实在。
我想这个界面一弹出来的时候,蛋蛋忧伤迎面扑来。然后怒点 Fix issue,然后你们团队负责管理证书的基友突然发现证书中心多了好多好乱的证书以及描述文件,然后他爆了一句:what the f××k!删掉了带有Xcode *的证书以及描述文件,然后自己又暴力的点了一发Fix issue,然后你突然调试不了了,再暴击Fix issue键,最后整个团队都只有通过Fix issue来真机调试了…
所以慎点Fix issue,如果点击这个选项,聪明的(蠢哭的)Xcode就会自己管理描述文件,然后各种莫名其妙的带有Xcode *的证书以及描述文件…
其实只要坚信一点,证书、设备ID、AppID、描述文件都弄对了就绝逼不会出问题的!
描述文件过期
苹果官方文档写明,企业证书有效期是3年,而描述文件只有1年有效期。所以当你的描述文件过期(expire)时。不用慌张,我看到网上好多朋友说删除重新生成,其实不用这么麻烦,只需要3步完成:点击过期的描述文件展开详情界面
-点击Edit按钮
-点击Generate按钮
打包安装失败
前言:iOS 的内测应用在安装时,很多人都遇到过安装失败的情况,安装失败的原因比较多,下面将一些常见原因总结如下,方便开发者进行排查。在 iOS 9 中启动应用时,出现提示“未受信任的企业级开发者”这样问题是因为在 iOS 9 以后的版本中,苹果对企业签名的应用做了更严格了限制。在 iOS 9 中点击“安装”按钮后,没有弹出“是否安装”的提示这个问题是因为 iOS 9 的一个 Bug 导致的。出现这个问题的前提,一般是由于用户已经从苹果官方 App Store 上安装了相同的应用。
【解决办法】
先在设备中删除之前已经安装的应用,然后再从托管平台安装即可。
为什么在 iOS 9 中,点击“安装”按钮后,没有任何反应,桌面也没有出现应用图标,但是状态栏上的网络图标在转这是由于 iOS 9 中的一个 Bug 造成的。虽然看上去没有反应,其实应用已经在后台开始下载并安装了,状态栏上的网络图标在转就是一个证明。这个时候,只要多等待一会儿就好了,应用安装完成之后会在桌面上显示出来的。
应用安装过程中提示"无法下载应用程序"
原因一:在导出 iOS App 的安装包文件( .ipa 文件)时,选择了 App-Store 方式。
在导出 iOS 的.ipa文件时,有些开发者选择了App-Store方式,这种方式导出的.ipa文件,只适合于上传到苹果App Store,并不能通过托管平台来安装。如果是这种方式导出的.ipa文件,传到托管平台上是不能通过安装的。
原因二:在导出 iOS App 的安装包文件( .ipa 文件)时,选择了 Ad-hoc 方式,但是没有添加设备 UDID 。
在导出 iOS 的安装包文件时,如果选择了Ad-hoc方式(一般用于苹果个人开发者账户),那么,如果要某台设备可以安装,则必须要将这台设备的UDID
添加到导出安装包时所用的证书文件中(.mobileprovision
文件),才可以在这台设备上安装。使用Ad-hoc方式导出的安装包文件上传到托管平台后,托管平台会显示为内测版,同时会在应用管理中,显示出该安装包的证书中包含的UDID列表。开发者可以根据显示出的UDID列表,来排查某台设备的UDID有没有被添加到安装包的证书中。
原因三:在导出 iOS App 的安装包文件( .ipa 文件)时,选择了 In-house 方式,但是证书已过期或被撤销。
在导出 iOS 的安装包文件时,如果选择了In-house
方式(一般用于苹果企业开发者账户),此时,如果出现无法安装的情况,开发者可以检查一下自己的企业开发者证书是否已过期或被撤销。因为苹果对于企业开发者证书管理较为严格,所以开发者如果使用不当,可能会导致企业证书被封,被封后的企业证书导出的安装包,也是无法正确安装的。
原因四:开发者在生成App安装包时,没有在 Xcode 中设置正确的 Architecture 。
iOS 应用的Architecture(架构),决定了这款 iOS 应用可以在哪些设备机型上安装。例如,如果某个应用在 Xcode 中只添加了 arm64 这一种Architecture
,那么最终打包后的安装包文件上传到托管平台后,对于 iPad mini、iPhone5 等以下设备,都是无法安装的(因为这些设备都不是 arm64 架构)。换句话说,如果需要在某个设备上可以安装,App 就必须支持那个设备的Architecture
。所以,正确的解决方法是,在生成 App 安装包时,尽可能让 App 支持更多的Architecture。
具体操作方法是:在Xcode-Build Settings-Architecture中,增加 armv7、armv7s、arm64,以便所有设备都可以安装。然后,将"Build active architecture only"设置为NO。对于各个 iOS 设备支持的Architecture
类型。请点击这里查看。
原因五:App 支持的 iOS 系统版本,和当前设备系统版本不符。
打包时 App 选择支持的 iOS 系统版本过低或者过高,都可能导致 App 无法安装成功。例如,如果某个 App 设置了只支持 iOS 7.0 以上的系统时,那么,如果在 iOS 6.1 系统上安装时,肯定是无法安装成功。
因此,我们应该尽量让 App 尽可能支持更宽泛的系统版本。
具体操作方式是:在Xcode-General-Deployment Info-Deployment Target
中,给 App 设置一个尽量低的版本,例如 iOS 5.0。
原因六:开发者上传的是一个破解的 ipa 安装包,或者是一个使用破解 Xcode 方式打包生成的 ipa 安装包,或者是通过 iTunes 生成的 ipa 安装包。
通过任何非 Xcode(或 Xcode 的命令行工具)生成的安装包,都是没有办法正确在设备上安装的(越狱设备除外)。
常见的不正确的打包 ipa 的方式有:通过 iTunes 导出安装包文件、通过 iTools 导出安装包文件等等。这种类型的 App 上传到托管平台后,会显示未签名的标签提示。
【正确的方法】
使用一个正常的苹果开发者证书,通过未破解的 Xcode 打包生成 ipa 安装包。
原因七:设备上已经安装了这个App,且已经安装的 App 和要安装的 App 是用不同证书打包的。
这种情况下,也会造成 App 安装失败。解决的方式很简单,开发者只需将设备上原来已经安装的 App 删除,再重新安装新的 App 即可。
原因八:Info.plist 文件中的LSRequiresIPhoneOS 没有设置,或者设置了 NO。对于 iOS 的 App 来说,如果Info.plist文件中的LSRequiresIPhoneOS
没有设置,或者设置了NO,那么由 Xcode 导出的安装包(.ipa包),就不会包含Payload文件夹,而是被一个叫做Applications的文件夹代替。这样的安装包在安装时,会被 iOS 判定为无效的安装包,所以无法被正确安装。
【解决方式】
只需要将Info.plist文件中的LSRequiresIPhoneOS设置为YES,然后重新打包即可。具体操作为:在 Xcode 中打开Info.plist文件,然后检查LSRequiresIPhoneOS是否已设置,如果没有设置,就添加一个,然后将LSRequiresIPhoneOS的类型设置为Boolean,值设置为 YES。设置好以后,可以看到Info.plist文件中显示Application requires iPhone environment的值为YES。
原因九:网络出现中断或异常。
遇到这种情况,用户可检查自己手机的所连接的网络是否稳定、速度是否正常等。可以尝试一下其他网站,或者更换一个 Wi-Fi,或者由 Wi-Fi 换成 3G/4G 等,然后重新安装。
【托管平台】: 托管平台是指将APP发布于第三方平台上面,供用户安装测试。常见的托管平台有蒲公英以及FIR
【App-Store】: App-Store版,用于发布到苹果商店
【Ad-hoc】: 内测版,用于内部指定设备使用
【In-house】: 企业版,可在任何设备上安装,但不能滥用
打包遇到找不到头文件问题(不常见)
问题描述: 在debug模式下编译运行没有问题,打包时在release时,product->Archive时编译找不到头文件
项目中报错找不到.h或者.m文件解决方法(常见问题)
- 在项目中本身就不存在,或者在本地没有加入项目
- 如果是协作开发,可能小伙伴没有提交到远程仓库,导致你工程没有,解决就是先更新在添加进入工程
- 在Founder本地,需要手动添加到工程
- 出现这个问题会特别蛋疼,明明存在该文件,但是一直报错。
- 确认是否存在改文件,文件是否在拖进项目时是否勾选上Copy items if needed
- 在点击Target,选择项目,在Build Setting下面的Other Linker Flag 中添加 -all_load,这个是强制加载文件
- 在Build Setting 中找到Search Paths, 添加$(SRCROOT)/项目名称/存放该文件的文件夹,可以有多级文件目录,这个$(SRCROOT)是系统环境变量,类似PHP中FILE可以获得当前文件的文件的路径。
- 清除Xcode缓存,Xcode有缓存,可能会导致文件加进来的,但是找不文件。除了在通过Clean,还可以下面方方式来操作:找到位于 /User/用名/Library/Developer/Xcode/DerivedData文件夹下面的所有文件情况,然后重启Xcode,注意不要删除DerivedData文件哦。
- 在Build Phases下面的Compile Sources里面检查一下你的文件存不存在,如果不存在就添加。这里需要说明一下,如果你的项目中出现Duplicate 文件.o保存,一般都是你重复引用文件,在Build Phases下面的Compile Sources 里面检查该文件,是否是重复,如果重复把重复的去掉。
上架一些问题处理
- app 提交后正在审核,这时发现重大bug,可以采取撤回审核。具体怎么解决呢?
- 在binary details里边 reject按钮 直接reject即可。重新上传之后需要新排队。
- 如果轻微bug 还是先上架在迭代实为上策
下架
- 在itunesconnect详情里面找到rights and pricing按钮选择specific stores然后选择Deselect all取消所有地区选择后,详情里就能看到delete app按钮了。这是最佳的下架做法
- other 汇总
问题一:
这个问题就是你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是刚下载好的,并且全是新安装。于是通过谷歌找到了答案。
参考地址:http://stackoverflow.com/questions/1760518/codesign-error-provisioning-profile-cannot-be-found-after-deleting-expired-prof
这里所说的就是要通过修改你的项目的.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里面删除该属性。
问题十三:
这个原因也有多种,一个出现比较多的原因就是,你之前安装的描述文件没有包含推送证书。重新登录到开发者中心,查看描述文件。
你会发现Status变成的状态是黄色的(正常是绿色),如下图。
点击Edit,然后选择Cenerate就行了。最后把描述文件下载,安装。
版本迭代
Version:是上架的版本号。Build:是本地显示版本号。
- 版本更新迭代就是更改了上架版本号Version。之前我的是1.0.0,首次修改了部分功能BUG,我修改为1.0.1。
- 进入iTunes提交页面,添加”版本或平台“!
- detailFunc
最后,Xcode集成了APPlication Loader 工具,传说上传更迅速好用,期待以后用一下