我有ipa文件。如何找出所需的权限?
例如,对于Android,我可以这样做:
aapt d permissions /path/to/com.your.package.apk
答案 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"
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中的所有文件。 awk
,sort
,head
,cut
组合获得最短路径,与过滤器匹配。
现在可以提取应用程序的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后触发应用程序审查。