我如何从IPA文件中查找iPhone应用程序的版本号?

29

我们正在尝试一种新的为应用程序指定版本号的方法。我想确认我们构建的IPA文件具有我们想要的版本号。如何从IPA文件中获取版本号?

注意 - 我不是在寻找从应用程序内部代码查找版本号的方法;我已经打开了一个终端并构建了IPA文件,我想知道在IPA文件内部应该寻找什么。


1
tar -zxvOf YourIPAFile.ipa Payload/YourAppName.app/Info.plist | plutil -convert xml1 -r -o - -- - | grep -A 1 CFBundleShortVersion - user1695975
1
tar -zxvOf YourIPAFile.ipa Payload/YourAppName.app/Info.plist | plutil -convert xml1 -r -o - -- - | grep -A 1 CFBundleVersion - user1695975
7个回答

50

从终端执行以下操作

    //Unzip the file 
    unzip YourIPAFile.ipa

    //Open payload folder
    cd Payload

    //Open your .app file
    cd yourApp.app

    //Open the plist file
    open Info.plist
你可以在 Bundle version key 下找到版本号 enter image description here

我可以使用这些命令并将其编写到工具中,该工具只检查最低操作系统版本吗? - jefferyleo

12

有比PlistBuddy和grep更好的方法:

unzip -d unzipped-ipa MyApp.ipa
defaults read "$(pwd)/MyApp.app/Contents/Info.plist" CFBundleVersion
rm -rf unzipped-ipa

值得注意的是使用defaults read需要提供您应用程序的绝对路径。


1
请注意,您可能应该引用整个字符串,因为路径中可能包含空格。我的现在看起来像:buildNumber=$(defaults read "$(pwd)/MyApp.app/Contents/Info.plist" CFBundleVersion) - EricS
PlistBuddy是更好的解决方案,因为默认值不应用于读取任意的plist文件。 - Frizlab

8
  1. Unzip your ipa file

    unzip YourIPAFile.ipa
    
  2. Following plistBuddy command prints Bundle Version

    /usr/libexec/PlistBuddy -c print Payload/NAME.app/Info.plist | grep CFBundleVersion
    

    CFBundleVersion = 1.0

  3. Following plistBuddy command prints BundleVersion String

    /usr/libexec/PlistBuddy -c print Payload/NAME.app/Info.plist | grep CFBundleShortVersionString
    

    CFBundleShortVersionString = 1.0


4

它在IPA/payload/NAME.app/Info.plist中。


就是这样。您可以像解压缩zip文件一样解压缩ipa文件。 - Ricard Pérez del Campo
1
尝试重新压缩它然后使用它是不明智的,我认为它不会被代码签名,因此无法在设备上运行。 - prince
你可以在ipa文件的副本上进行操作。 - Ricard Pérez del Campo
好的,我只是说,不要再重新压缩它哈哈哈。 - prince

2

您可以使用tar的功能提取单个文件,然后将结果流式传输到标准输出并将其导入plutil命令(pl=>属性列表),而无需编写和删除文件。额外的奖励,将其管道传输到grep,查找字符串“Version”,只显示找到模式后的一行。

在下面的命令中,用您想要检查的ipa文件的名称替换YourIPAFile.ipa,并用Plist.info文件中捆绑可执行文件的名称YourAppName.app进行替换。对我来说,使用flutter时,这两个值是相同的“Runner”,但本质上是tar文件中info.plist文件所在的目录。

tar -zxvOf YourIPAFile.ipa Payload/YourAppName.app/Info.plist | plutil -convert xml1 -r -o - -- - | grep -A 1 Version

输出为:

x Payload/YourAppName.app/Info.plist
        <key>CFBundleInfoDictionaryVersion</key>
        <string>6.0</string>
--
        <key>CFBundleShortVersionString</key>
        <string>1.0.5</string>
--
        <key>CFBundleVersion</key>
        <string>1</string>
--
        <key>DTPlatformVersion</key>
        <string>14.0</string>
--
        <key>MinimumOSVersion</key>
        <string>9.0</string>

更确切地说:

tar -zxvOf YourIPAFile.ipa Payload/YourAppName.app/Info.plist | plutil -convert xml1 -r -o - -- - | grep -A 1 CFBundleVersion

该命令用于提取应用程序的版本号。请按照上述格式输入命令,并将YourIPAFile.ipa替换为您的ipa文件名,YourAppName.app替换为您的应用程序名称。
x Payload/YourAppName.app/Info.plist
        <key>CFBundleVersion</key>
        <string>1</string>

或者

使用以下命令将IPA文件中的Info.plist文件提取出来,并转换为可读的xml格式,然后查找应用程序版本号:

tar -zxvOf YourIPAFile.ipa Payload/YourAppName.app/Info.plist | plutil -convert xml1 -r -o - -- - | grep -A 1 CFBundleShortVersion

x Payload/YourAppName.app/Info.plist
        <key>CFBundleShortVersionString</key>
        <string>1.0.5</string>

最佳答案。对于那些不确定 YourAppName.app 是什么的人 - 只需将您的 .ipa 重命名为 .zip,然后解压缩它。Payload 中的任何内容都是应用程序的名称。 - kraftydevil
这个性能更好,谢谢!如果你只对构建号本身感兴趣,你可以使用这个命令: build_number=$(tar -zxvOf YourApp.ipa Payload/YourApp.app/Info.plist | plutil -convert xml1 -r -o - -- - | grep -A 1 CFBundleVersion | grep string | awk -F">" '{print $2}' | awk -F"<" '{print $1}') 在这种情况下,它将把“1”分配给build_number。 - iVentis

1

我更喜欢使用ProvisionQL。 https://github.com/ealeksandrov/ProvisionQL 它可以快速预览IPA文件(用两个手指点击IPA文件并在快速查看中单击)。 它显示的信息包括:名称,版本,包ID,设备系列,配置信息,证书,分发配置文件,授权和更多。


0

更容易更好的方法是如果您可以在QuickLook中看到详情。

现在有一个快速查看插件,提供了许多详细信息。

您必须安装homebrew

快速查看插件链接在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接