代码改变世界

xcode11 xcrun altool 自动上传ipa到app store 报错A Distribution Provisioning profile should be used when submitting apps to the App Store. For more information

2020-08-07 15:10  加个小鸡腿  阅读(1271)  评论(0编辑  收藏  举报

相信你在出现这个问题之前已经查阅过很多资料来实现如何使用命令行上传ipa到app store或者TestFlight,无需多说,很多博客都会告诉你执行两条命令就可以了,一条验证,一条上传,如下:

xcrun altool --validate-app -f  your.ipa  -t ios  --apiKey XXX --apiIssuer XXX --verbose  这是验证ipa是否有效
xcrun altool --upload-app -f   your.pia  -t ios  --apiKey XXX --apiIssuer XXX --verbose 这是上传ipa到应用商店

但是我在验证ipa的时候,就一直报错,如下

 

 

查阅了很多资料,都说要将自动签名管理的勾去掉,然后配置相应的provisioning profile 和签名证书类型,比如如下:

 

 因为我原来的工程配置就是打开了automatically manage signing的,会自动下载和更新provisoning prifile,他的办法是叫我改成手动配置proviosion profile,可是我要兼容原来的自动配置的,况且,我不是ios开发,我是配置管理员,是命令行打包人员,让开发人员给我两份配置文件,明显是不合理的,还有我配置了一遍,各种问题,连编译都失败了,xcode配置了automatically manage sigining后,打包可以上传到app store,说明最后的上传和这个配置不是完全相关的,所以去掉automatically manage signing 对我来说是不通的,应该有更加好的办法。

 分析:

    看上面的截图,我们看到Automatically manage signing 下面有一行“xcode will create and update profiles,app IDs, and certificates”,那就是说打包的时候只要也做到自动更新就好了,然而我的打包命令如下:

mkdir arch
archive_path=arch/${app_name}.xcarchive
workspace_name=TVAssistant
xcodebuild clean -workspace ${workspace_name}.xcworkspace -scheme ${app_name} -configuration $ios_type   #clean
xcodebuild archive -workspace ${workspace_name}.xcworkspace -scheme ${app_name} -archivePath $archive_path -configuration $ios_type  #archive
plist_file=ExportOptions.plist
xcodebuild -exportArchive -archivePath $archive_path -exportPath arch/target_ipa -exportOptionsPlist $plist_file -allowProvisioningUpdates   #导出ipa

上面的几条命令执行了clean --》archieve app ---》export ipa的过程,重点是在最后的export ipa的过程

(1)如果你的ExportOptions.plist不对,还是会出现A Distribution Provisioning profile should be used when submitting apps to the App Store的报错,所以ExportOptions.plist一定要正确

我的ExportOptions.plist(重点是method的值,不同环境需要修改成不同的值,上应用商店要修改成app-store),如下

 

 

 (2)如果你没有使用-allowProvisioningUpdates会报 “No profiles for  **** was found”,如下:

 所以完整的导入ipa命令一定要使用正确的ExportOptions.plist和-allowProvisioningUpdates允许跟新provisoning profiles

xcodebuild -exportArchive -archivePath $archive_path -exportPath arch/target_ipa -exportOptionsPlist $plist_file -allowProvisioningUpdates 

然后再执行验证ipa就可以验证成功了!

接下来就是上传了!!!

 

关于如何在app store上得到apikey 和api user id,如下:

  1. 在首页上,请先点按“用户和访问”,然后再点按“密钥”。

  2. 请点按“添加”按钮(+)。

  3. 请输入该密钥的名称。该名称仅供您参考,不属于密钥本身。

  4. 在“访问”一栏中,选择职能权限来决定该 API 用于何处。API 密钥适用于所有 App——无法限制 API 密钥对 App 的访问权限。

  5. 请点按“生成”。下载 API 密钥

  6. API 密钥为私有密钥且只能下载一次。下载密钥后,将其存储在安全的地方。如果密钥丢失或损坏,请谨记立即将其撤销。

  7. 下载以后存在你本地的用户路径下的private_keys文件夹下,即~/private_keys/        参考:https://blog.csdn.net/weixin_30609287/article/details/97750499