通过命令行列出iOS应用程序的权限

时间:2016-10-04 16:23:44

标签: ios command-line permissions

我有ipa文件。如何找出所需的权限?

例如,对于Android,我可以这样做:

aapt d permissions /path/to/com.your.package.apk

2 个答案:

答案 0 :(得分:1)

这个问题可能有点令人困惑(至少对我而言)。

1)

如果您正在谈论UNIX /文件系统权限,那么您可能会对.ipa文件在iOS下的工作方式产生根本性的误解。文件系统权限不重要,它是重要的配置文件。

如果它是测试版本或ADHOC版本,then there's a provisioning file built into the app which you can examine if your device's UUID is included

2)

如果您正在谈论功能权限(适用于相机或通讯录或其他),there's a list of permissions that you can look up via the app's info.plist file

答案 1 :(得分:1)

正如previous answer所阐明的那样,存在UNIX文件系统权限和应用程序(或“功能性权限”,在上一个答案中称为“功能性权限”)。应用程序权限存储在应用程序的信息属性列表(Info.plist)中

要在命令行中获取所有权限的列表,基本上必须执行两个步骤。为此,假定IPA的路径存储在$IPA中。

export IPA="/path/to/app.ipa"
  1. IPA是zip存档,因此您首先需要找到属于该应用程序的Info.plist。由于很可能存在其他信息属性列表(例如,针对Frameworks或Watch应用程序),并且由于它位于具有应用程序名称的目录中,因此以前可能不知道该名称,因此无法简单地进行匹配。为了获得最可能的候选者,最好在以Info.plist结尾的目录中匹配名为.app的文件。此目录可能包含其他具有相同模式的目录,例如Watch apps。在所有与模式匹配的路径中,最短的路径(层次结构的顶部)应为应用程序的路径:

    zipinfo -1 "$IPA" | grep -E '\.app\/Info.plist' | awk '{print length ":" $1}' | sort --sort=numeric | head -1 | cut -d ':' -f 2
    

    zipinfo命令列出了IPA中的所有文件。 awksortheadcut组合获得最短路径,与过滤器匹配。

  2. 现在可以提取应用程序的Info.plist并列出权限:

    unzip -p "$IPA" "$(…)" | grep -E --only-matching '\w+UsageDescription'
    

    其中是确定Info.plist的命令。您可以将$(…)替换为指向Info.plist的路径。这对于列出macOS应用程序的权限也可能很有用。

结合起来,可以提取IPA的应用程序权限的完整单行代码是:

unzip -p "$IPA" "$(zipinfo -1 "$IPA" | grep -E '\.app\/Info.plist' | awk '{print length ":" $1}' | sort --sort=numeric | head -1 | cut -d ':' -f 2)" | grep -E --only-matching '\w+UsageDescription'

输出如下:

NSCameraUsageDescription
NSHealthUpdateUsageDescription
NSBluetoothPeripheralUsageDescription
NSHealthShareUsageDescription
NSCalendarsUsageDescription
NSMicrophoneUsageDescription
NSLocationWhenInUseUsageDescription
NSContactsUsageDescription
NSPhotoLibraryUsageDescription

可以从官方文档Information Property List Key Reference: Cocoa Keys中获得有关不同用法说明的详细信息。从iOS 10开始,如果应用程序尝试访问受未定义使用说明的权限保护的资源,则该应用程序将崩溃。因此,该命令返回应用程序可以访问的一整套权限保护资源。

出于完整性考虑:第三种权限:沙盒权利,例如,用于允许提供VPN连接的应用程序。这些直接嵌入到应用程序的二进制文件中。用户看不到权利。它们将由Apple进行检查,因为使用权利将在提交到App Store后触发应用程序审查。