【问题标题】:How to parse the Info.plist file from an ipa如何从 ipa 解析 Info.plist 文件
【发布时间】:2022-03-09 19:05:14
【问题描述】:

我想编写一个程序来获取应用程序的详细信息,例如来自 ipa 文件的应用程序名称、版本、捆绑标识符。但是,此文件不是纯文本文件,它以某种方式编码,我的程序无法解析它。

有没有办法解码这个文件?

更新

为了澄清这个问题,我正在编写一个 python 程序来从我从 Xcode 导出的 ipa 文件中获取应用程序的详细信息。

【问题讨论】:

  • 澄清您的问题。您是在谈论从应用程序自己的 Info.plist 中获取详细信息,还是在谈论可以提取其他 ipa 文件的 Info.plist 信息的应用程序?

标签: ios parsing ipa


【解决方案1】:

如果你有一台 macbook,这很容易。
然后遵循以下准则:http://osxdaily.com/2011/04/07/extract-and-explore-an-ios-app-in-mac-os-x/

  1. 从 file.ipa 重命名 -> file.zip
  2. 解压文件.zip
  3. 转到 Payload 文件夹
  4. 右键单击应用程序文件 -> 显示包内容
  5. 参见 Info.plist

【讨论】:

    【解决方案2】:

    对于没有 Apple Developer 登录的用户,以下是已接受答案link 中的两个答案(您必须登录才能看到它):

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

    【讨论】:

      【解决方案3】:

      我的 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
      【解决方案4】:

      从 Apple 的开发者论坛获得 answer

      PlistBuddy 是您正在寻找的:

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

      【讨论】:

      • 这种回答对社区没有帮助,有可能链接不会一直有效。
      【解决方案5】:

      在 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'])
      

      【讨论】:

        【解决方案6】:

        双击 plist 将从 XCode 中打开。

        【讨论】:

          猜你喜欢
          • 2018-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-27
          • 2018-04-07
          • 1970-01-01
          相关资源
          最近更新 更多