如何解析一个ipa文件中的Info.plist文件

9
我想编写一个程序,从ipa文件中获取应用程序的详细信息,例如应用程序名称、版本和捆绑标识符。然而,这个文件不是纯文本文件,它以某种方式进行编码,我的程序无法解析。
有没有办法解码这个文件? 更新 为了澄清问题,我正在编写一个Python程序,从我从Xcode导出的ipa文件中获取应用程序的详细信息。

请澄清您的问题。您是在谈论从应用程序自己的Info.plist获取详细信息,还是在谈论一个可以提取其他ipa文件的Info.plist信息的应用程序? - rmaddy
8个回答

10

4

对于那些没有苹果开发者登录的人,这里是来自被接受的答案链接的两个答案(你必须登录才能看到):

  • 使用PlistBuddy
    • /usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" yourBinaryOrXmlPlist.plist
  • 还有许多其他解析二进制plist文件的方法。例如,我正在使用Python,并且有一个名为biplist的库,专门用于读写二进制plist文件并支持Python 2和3。此外,Python 3.4中的'plistlib'通过新API支持二进制plist操作。

2

我的Python版本: https://gist.github.com/noamtm/a8ddb994df41583b64f8

在我的研究中,棘手的部分是解析二进制plist,因为Python的PlistLib无法读取它:

from Foundation import NSData, NSPropertyListSerialization 
# Use PyObjC, pre-installed in Apple's Python dist.
def parse_plist(info_plist_string):
  data = NSData.dataWithBytes_length_(info_plist_string, len(info_plist_string))
  return NSPropertyListSerialization.propertyListWithData_options_format_error_(data, 0, None, None)

感谢您提供的脚本,它非常有帮助,可以在不知道应用程序名称的情况下读取plist文件。+1 - ibrahim

2
双击 plist 文件将从 XCode 中打开。

1

我从苹果的开发者论坛上获得了答案

PlistBuddy是你要找的工具:

/usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" yourBinaryOrXmlPlist.plist


1
这种回答对社区没有帮助,链接可能并不总是有效。 - manroe

1
在Mac上,您可以使用ootb plutil来完成此操作:
# Convert a binary plist to XML
plutil -convert xml1 info.plist
 
# Convert XML back to binary
plutil -convert binary1 info.plist

如需更多细节,请在终端中输入man plutil

如果您想以编程方式解析文本或二进制.plist文件,例如使用Python,则可以使用标准库模块plistlib

import plistlib

with open ('/etc/bootpd.plist', 'rb') as plist:
    conf = plistlib.load(plist)
    print(conf['dhcp_enabled'])

0
这是我在Python中找到的解决方案: 由于.plist文件是二进制编码的,所以你需要一个能够读取二进制格式文件的Python库。对于这个特定的例子,我使用了plistlib。 注意:当你解压缩.ipa文件时,你会得到一个.app文件。
from zipfile import ZipFile 
import plistlib 
with ZipFile("/content/sample_data/Experience Abu Dhabi.app.zip", 'r') as zObject: 
zObject.extractall( 
    path="/content/sample_data/temp") 
path = "/content/sample_data/temp/Experience Abu Dhabi.app/Info.plist"
with open(path, 'rb') as f:
    data = plistlib.load(f)
print(data)

-1
  1. 将文件名从file.ipa改为file.zip
  2. 解压file.zip并进入Payload文件夹
  3. 右键点击应用程序文件,选择“显示包内容”
  4. 使用Xcode右键点击“Info.plist”文件

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