1、问题描述

  • 自从在主应用中加入SiriShortCut功能之后,打包程序上传至 iTunes Connect 就会出现警告,看其原因描述是CFBundleVersion主应用与子应用的不一致导致的
Prepared archive for uploading
Uploaded with warnings
warning: App Store Connect Operation Warning
WARNING ITMS-90473: "CFBundleVersion Mismatch. The CFBundleVersion value '1.1' of extension 'ukon.app/PlugIns/CHSiriIntent.appex' does not match the CFBundleVersion value '181212.337' of its containing iOS application 'ukon.app'."

2、问题解决

  • 如果对工程上的初始配置没有修改过,例如:没有使用脚本动态修改CFBundleVersion,那么可以直接使用以下方法解决

  • 2.1 直接修改Build

    • 主程序

    • siriShortCut子程序



    • 只要保证主子程序内容一致就可以了
  • 2.2 动态修改Build

    • 动态修改Build使用脚本来修改,由于主程序中使用了动态修改,子程序中也需要使用动态修改。我这里由于接的是老项目,不了解工程配置,找了好久才找出原因
    • 脚本使用sh脚本
    BUILD_REV=`date +%y%m%d`.`git rev-list HEAD | wc -l | awk '{print $1}'`
    GIT_HASH=`git log --oneline -n 1 | awk '{print $1}'`
    INFO_PATH="${TARGET_BUILD_DIR}"/${INFOPLIST_PATH} /usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${BUILD_REV}" ${INFO_PATH}
    /usr/libexec/PlistBuddy -c "Delete :GIT_HASH" ${INFO_PATH}
    /usr/libexec/PlistBuddy -c "Add :GIT_HASH string ${GIT_HASH}" ${INFO_PATH}
    • 在主程序与子程序中分别创建脚本文件

    • 双击重命名为Update CFBundleVersion(Build Version)

    • 展开粘贴以上脚本

    • 由于脚本中的拼接还使用到了CFBundleShortVersionString,所以还要保持这里一致
    • 主子程序都要修改,其中CFBundleVersion在这里设置无效

    • 至此,就可以动态修改保持主子程序CFBundleVersion一致了,得出的构建版本是:日期 + 应用版本号

新增扩展程序功能打包提交新版 WARNING ITMS-90473 警告问题的更多相关文章

  1. 【03】Chrome提示印象笔记剪藏插件"已停用不支持的扩展程序"怎么办?

    [03] Chrome提示印象笔记剪藏插件"已停用不支持的扩展程序"怎么办? 刚好也遇上了这个问题,百度了一下,以下是解决方法,亲测可行: 1.首先把需要安装的第三方插件,后缀.c ...

  2. sbt打包Scala写的Spark程序,打包正常,提交运行时提示找不到对应的类

    sbt打包Scala写的Spark程序,打包正常,提交运行时提示找不到对应的类 详述 使用sbt对写的Spark程序打包,过程中没有问题 spark-submit提交jar包运行提示找不到对应的类 解 ...

  3. 16、如何将安装在chrome上的插件(扩展程序)打包成".crx"文件

    1.打开扩展程序: 2.打开开发者模式并选择要打包的插件: 3.打包扩展程序: (1) (2) (3)

  4. 解决新版chrome无法手动拖动安装插件 提示“无法从该网站添加应用,扩展程序和用户脚本”

    开发模式安装 把下载后的.crx扩展名的离线Chrome插件的文件扩展名改成.zip或者.rar 解压压缩文件 在Chrome的地址栏中输入:chrome://extensions/ 打开Chrome ...

  5. 谷歌浏览器(chrome)查找、打包已安装的扩展程序

    我们有时候会安装浏览器扩展程序,正常情况下,我们回去谷歌应用商店里面进行下载,但是这个需要VPN,有时候我们没法使用VPN,想从其他已安装扩展程序的浏览器上直接安装就可以使用我们下面这个方法 win1 ...

  6. Chrome扩展程序的二次开发:把它改得更适合自己使用

    我当然知道未经作者允许修改别人程序是不道德的了,但作为学习研究之用还是无可厚非,这里仅供交流. 一切都是需求驱动的 话说某天我在网上猎奇的时候无意间发现这么一款神奇的谷歌浏览器插件:Extension ...

  7. chrome添加 postman扩展程序图文简介

    Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件.无论是web前端开发 或 android.ios开发,只要涉及调用后端接口,postman这类型工具就必不可少了.相对于 ...

  8. MAC上postman离线安装时提示加载扩展程序出错怎么办?

    目前的postman插件如果想正常使用,必须安装Postman Interceptor插件,这样才能直接使用chrome浏览器的cookie等信息,否则postman是无法完成老版本的功能的.post ...

  9. 使用DeviceOne实现微信小程序功能

    微信小程序即将推出,还没推出就火的不行了.基于微信这个巨大平台,小程序必然能有巨大成功.不过它并不能完全取代App,该开发App还得开发.如果我们自己想实现一个基于自己的APP包含类似微信的小程序功能 ...

随机推荐

  1. js日期date对象

    js日期 日期对象的一些属性和方法 var date = new Date() date.toString() // "Tue Jan 29 2019 22:58:13 GMT+0800 ( ...

  2. OGG for sqlserver engryption && insert/delete

    OGG for sqlserver engryption && insert/delete 1. 源端操作 1.1 获取key 作为数据库用户密码加密 d:\GoldenGate\gg ...

  3. ffmpeg个人翻译文档1-8<转>

    [个人翻译]ffmpeg文档1 (2008-08-26 09:39:15) 转载 标签: 杂谈 分类: 翻译文档 指导1:制作屏幕录像 源代码:tutorial01.c 概要   电影文件有很多基本的 ...

  4. 24-从零玩转JavaWeb-包装类、自动装箱、自动拆箱

    一.什么是包装类 二.对基本数据类型包装的好处 三.装箱操作 四.拆箱操作 五.自动装箱 六.自动拆箱 七.字符串与基本数据类型和包装类的转换   八.包装类的缓存设计

  5. JS中日期处理

  6. 【Android】Android 4.0 无法接收开机广播的问题

    [Android]Android 4.0 无法接收开机广播的问题   前面的文章 Android 开机广播的使用 中 已经提到Android的开机启动,但是在Android 4.0 有时可以接收到开机 ...

  7. 【原创】9. MYSQL++中的Field、FieldNames以及FieldTypes类型

    mysqlpp::Field其实使用的并不多,主要在于Result.h中ResultBase以及他的派生类型(UseQueryResult和StoreQueryResult)的几个获取下一个field ...

  8. JUNIT的用法简要总结

    JUNIT是一个单元测试框架,可以用来测试我们程序中的某个模块是否工作正常.而不需要去写一个MAIN函数来测试,方便快捷. 经过对博客http://blog.csdn.net/andycpp/arti ...

  9. Tensorflow Mask-RCNN训练识别箱子的模型运行结果(练习)

    Tensorflow Mask-RCNN训练识别箱子的模型

  10. Flask框架 之 学生管理分析

    先看模板吧. index.html <body> <h1>学生列表</h1> <table border="1"> <thea ...