【问题标题】:iOS Extension: Is it necessary to increment its bundle version (CFBundleVersion)?iOS 扩展:是否有必要增加其捆绑版本(CFBundleVersion)?
【发布时间】:2015-01-14 22:29:48
【问题描述】:

我是否必须在我的扩展的 Info.plist 中增加 CFBundleVersion 以确保它覆盖现有的?或者如果在主应用的 Info.plist 中这样做就足够了?

我正在处理今天的扩展,但我想这个问题适用于所有嵌入式二进制文件。

【问题讨论】:

  • 我不这么认为,扩展程序存储在主应用程序中,当您用新应用程序替换应用程序时会被覆盖。但我可能是错的。特别是对于手表扩展,因为这些可能会被复制到手表上?
  • 手表扩展是一个有趣的点。我想我们很快就会知道的!
  • 检查这个答案。 stackoverflow.com/a/33421662/5790492

标签: ios ios8-extension


【解决方案1】:

基于@atomkirk 的回答,在我的应用程序中,版本和内部版本号设置在xcodeproject 中。所以我不需要使用xcodebuild 来提取相关值:

buildNumber=$(xcodebuild -showBuildSettings -project App.xcodeproj | pcregrep -o1 "PROJECT_VERSION = ([0-9a-f\-]+)")
marketingVersion=$(xcodebuild -showBuildSettings -project App.xcodeproj | pcregrep -o1 "MARKETING_VERSION = ([0-9a-f\-.]+)")

/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$SRCROOT/Share Extension/Info.plist"
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $marketingVersion" "$SRCROOT/Share Extension/Info.plist"

【讨论】:

    【解决方案2】:

    我认为 Apple 实际上更喜欢 App Extensions 使用与它们所包含的应用相同的捆绑版本。这是每次提交时我从 iTunes Connect 收到的电子邮件:

    我们发现您最近交付的一个或多个问题 “很棒的应用程序”。您的交付成功,但您可能希望 在您的下一次交付中更正以下问题:

    CFBundleVersion 不匹配 - 扩展的 CFBundleVersion 值 '94' 'Awesome App.app/PlugIns/Awesome App Today Extension.appex' 没有 匹配其包含 iOS 应用程序的 CFBundleVersion 值“99” “很棒的 App.app”。

    CFBundleShortVersionString 不匹配 - CFBundleShortVersionString 扩展“Awesome App.app/PlugIns/Awesome App Today”的值“1.0” Extension.appex' 与 CFBundleShortVersionString 值不匹配 其包含 iOS 应用程序“Awesome App.app”的“1.3.0”。

    纠正问题后,您可以使用 Xcode 或 Application 加载程序将新的二进制文件上传到 iTunes Connect。

    我可以忽略这些警告并且构建通过审核,但这要么是 iTunes Connect 中的错误,要么数字应该相同。这实际上没有意义,因为扩展不一定会以与应用程序相同的速度更新。反正

    【讨论】:

    • 谢谢。在构建我的手表扩展程序时,我也开始(本地)收到类似的警告,但奇怪的是我今天的扩展程序并没有给我同样的警告。所以就像你说的,这要么是一个错误,要么是一个新要求,而且是一个奇怪的要求。
    • 我也得到了,但是当我匹配版本并再次上传时,它说是冗余二进制上传。
    • 在我的情况下,扩展和应用程序目标的版本是相同的通用选项卡下。但我在 Build 设置中发现,在 Versioning(Current Project Version) 下,Debug 有 1,release 有 2 值。所以,由于这个不匹配的版本,我收到了警告。
    【解决方案3】:

    为了避免来自 iTunes Connect 的警告,我只是从我的主应用程序的“Bump build number”构建脚本中增加了所有版本号:

    if [ "$BUMP_BUILD_NUMBER" = "1" ] ; then
    buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${INFOPLIST_FILE}")
    buildNumber=$(($buildNumber + 1))
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${INFOPLIST_FILE}"
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "/Users/name/project/ios/Siri/Info.plist"
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "/Users/name/project/ios/SiriUI/Info.plist"
    fi
    ``
    

    【讨论】:

    • 最佳答案!只有一个建议:使用$SRCROOT/ExtensionName/Info.plist 而不是绝对路径。
    【解决方案4】:

    这两种方式都没有记录,因此您应该更新它。这可能无关紧要,但你不能确定,即使现在没有必要,以后也可能变得有必要。作为一个未记录的细节,它可能会在没有警告的情况下更改。

    这也是很好的软件开发实践。每当扩展发生变化时,嵌入的版本号也应该发生变化,即使 iOS 没有对这些信息做任何事情。

    【讨论】:

    • 谢谢汤姆。我可以确认,即使版本没有增加,嵌入式扩展总是会被安装,但就像你说的那样,它没有记录,所以安全总比抱歉好。
    • @Tom Harrington,我已经为我的应用添加了扩展,我的扩展应用包版本是否继承自主应用包。
    【解决方案5】:

    我一直在寻找相同的答案,我最近刚刚更新了一个应用程序,发现在上传时,我收到了关于扩展程序和版本号与应用程序不匹配的警告,(可以'不记得具体的措辞)-这就是我在这里的原因!

    “应用扩展及其包含的应用必须使用与 Xcode 项目中其他目标中使用的相同的内部版本号 (CFBundleVersion) 和版本号 (CFBundleShortVersionString)。”

    信息不多,但很清楚 - App 扩展和 WatchKit 扩展的版本必须与它们所在的应用程序的版本匹配。

    即使给我们一个选项来指定单独的版本号似乎也有点无意义,不是吗?

    【讨论】:

      【解决方案6】:

      是的,扩展包版本(包版本 && 包版本字符串,短)必须与主应用构建 && 版本不匹配。

      所以, 捆绑版本扩展 = 主应用构建

      捆绑版本字符串,短 = 主应用版本

      【讨论】:

        猜你喜欢
        • 2022-12-11
        • 1970-01-01
        • 2012-04-03
        • 2011-09-11
        • 1970-01-01
        • 1970-01-01
        • 2013-10-22
        • 1970-01-01
        相关资源
        最近更新 更多