Application Loader 的使用以及常见问题汇总

经常使用Xcode上传代码到iTunes Connect的人都知道很多时候由于网络的原因都会上传失败,最常见的就是卡在 “Sending API Usage to iTunes Connect… “这步,或者出现”iTunes Store operation failed. This action could not be completed.Try again”,解决办法就是重新上传,或者换一个网络重新上传,多上传几次就会成功,但是我发现最近上传总是失败,使我不得不寻找其他途径,于是我发现使用Application Loader上传非常方便,所以在这里做一下简单介绍

Application Loader下载

下载链接网上有很多,最直接的就是在iTunes Connect的版本构建里边,下载完成之后安装步骤和普通的软件相同,一路下一步轻松搞定

下载之后的主界面如图所示
Application Loader主界面

登录

登录你的苹果开发者账号

登录之后主界面如图所示
登录主界面
我们常用更新app版本用的是交付您的应用程序,在这里需要上传.ipa文件(之前有的文章介绍说上传.zip文件,记住现在下载的软件不要上传.zip文件了,需要上传.ipa文件)

生成ipa文件

在Xcode中将您的证书以及版本配置完成后直接选择Archive打包(因为配证书的教程太多了,所以我就不做介绍了,不会的同学可以自行百度)

这里写图片描述

如果Archive是灰色的话记得修改图片红色框的位置

等待编译完成之后开始导出ipa文件,导出ipa文件的方法不止一种,在这里我介绍一下我最常用的:
选择刚刚打的包 右键 Show in Finder
这里写图片描述

在Finder中右键文件选择显示包内容
这里写图片描述

在products -> Applications 文件夹下会有打包的文件,但是此文件非ipa文件,在这里我们需要将它拖到iTunes的我的应用目录下(iTunes一定要记得登录,可以使用普通的苹果账号登录,如果里边有之前拖进去的文件会提示是否替换,选择替换就ok了)
这里写图片描述

最后我们只需要按住应用图标直接拖拽到桌面上就会生成我们所需的ipa文件了,文件样子如图所以
这里写图片描述

上传应用

打开Application Loader 选择右下角的选取,选择刚刚生成的ipa文件,打开之后会出现文件的详情
这里写图片描述

选择下一步开始上传应用到iTunes Connect,点击活动按钮会弹出上传的详情,在这里边你可以清晰的看到每一步在做什么
这里写图片描述

上传完成之后可能会弹出如下界面

这里写图片描述
如果是这个界面,只有一个警告的话没有影响可以直接下一步,然后点击完成,等待几分钟后你的iTunesConnect中就会出现你此次构建的新版本

常见问题总结

上传完成之后出现上边的界面就表示上传成功了,但是如果在这个界面有ERROR就表示上传过程中出现问题了,需要修改后重新上传,在这里我把几个常见的问题做一下总结

ERROR ITMS-90161: "Invalid Provisioning Profile. The provisioning profile included in the bundle xxx.yyyyyy.zzzz [Payload/xxx.yyyyyy.zzzz.app] is invalid. [Missing code-signing certificate].A Distribution Provisioning profile should be used when submitting apps to the App Store.  For more information, visit the iOS Developer Portal."

这个错误是一个比较常见的错误,意思是Provisioning profile这个文件没有正确配置。所以首先你要去登录苹果开发者账号,查看你的发布证书和Provisioning profile文件,确保其是正确可用状态,否则需要重新配置,切记命名不要相同。如果确定证书都是正确的就很可能是你的Xcode中的Code Signing中配置不正确。打开Xcode -> 选择你的工程 -> Build Settings -> Code Signing 将其中的证书选择正确
这里写图片描述
我之前使用Xcode上传的时候这里边都选择的Developer也能上传成功,但是用Application Loader的时候不修改就会报错,所以许多第一次用Application Loader上传的时候都会忽略这个问题

"ERROR ITMS-90029" Storyboard file 'LaunchScreen~ipad.storyboardc' was not found. Please ensure the specified file is included in the bundle with any required device modifiers appended to the filename.

这个错误相对上一个就比较好定位,根据提示可以看出来是“LaunchScreen~ipad.storyboardc”这个文件没有找到。解决方法就是在我们的info.plist文件中配置两个key就好
这里写图片描述

你可以将这两行代码抄到你的info.plist中:右键你工程的info.plist -> Open As -> Source Code 直接添加上这两行代码即可,添加之后你的文件中会多出两个key,效果如下:
这里写图片描述

ERROR ITMS-90529:"Invalid package.Applications built with sdk9.0 or later must be packaged ad proper IPA files

这个错误就是之前说的,现在下载的软件不能上传.zip文件了,重新上传.ipa文件就好了

ERROR ITMS-9000: "Invalid Bundle. The bundle M.T.R.app does not support the minimum OS Version specified in the Info.plist.

如果引入了一些第三方的东西,资源里边可能会存在着第三方的info.plist文件,这些文件是和你的工程无关的,删除后重新打包上传就ok了(我之前直接用Xcode上传的时候如果存在着第三方的一些info.plist文件也会上传失败,所以建议如果有就直接删除掉)。

ERROR ITMS-90022: "Missing required icon file. The bundle does not contain an app icon for iPhone / iPod Touch of exactly '57x57' pixels, in .png format for iOS versions < 7.0."

根据提示很轻松的能判断出是缺少 57x57 的icon file. ,需要提供57x57 的icon file. 但是有时候上传之后还会报这个错误提示多了一个这个文件。此时你需要去你工程的info.plist文件中寻找icon file的key查看里边是否有提示的文件记录,如果有将其删除。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
RestTemplate 是一个非常常用的 HTTP 客户端工具,但在使用过程中可能会遇到一些问题,以下是一些常见问题及解决方法: 1. 如何设置 RestTemplate 的请求头? 可以使用 HttpHeaders 类来设置请求头,例如: ``` RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.set("Authorization", "Bearer token"); headers.set("Content-Type", "application/json"); HttpEntity<String> entity = new HttpEntity<>("body", headers); restTemplate.exchange(url, HttpMethod.POST, entity, String.class); ``` 2. 如何发送 GET 请求并接收 JSON 格式的响应? 可以使用 RestTemplate 的 getForObject 方法,例如: ``` RestTemplate restTemplate = new RestTemplate(); String result = restTemplate.getForObject(url, String.class); ``` 3. 如何发送 POST 请求并接收 JSON 格式的响应? 可以使用 RestTemplate 的 postForObject 方法,例如: ``` RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.set("Content-Type", "application/json"); HttpEntity<String> entity = new HttpEntity<>("body", headers); String result = restTemplate.postForObject(url, entity, String.class); ``` 4. 如何处理返回的响应状态码? 可以通过 ResponseEntity 来获取响应状态码和响应体,例如: ``` RestTemplate restTemplate = new RestTemplate(); ResponseEntity<String> response = restTemplate.getForEntity(url, String.class); if (response.getStatusCode() == HttpStatus.OK) { String result = response.getBody(); } else { // 处理失败逻辑 } ``` 5. 如何处理请求超时? 可以通过设置 RestTemplate 的超时时间来处理请求超时,例如: ``` RestTemplate restTemplate = new RestTemplate(); SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); requestFactory.setConnectTimeout(5000); requestFactory.setReadTimeout(5000); restTemplate.setRequestFactory(requestFactory); ``` 以上是一些常见的 RestTemplate 使用问题及解决方法,希望对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值