iOS权限警报 - 删除或禁止

时间:2015-02-10 23:03:39

标签: ios objective-c ios-simulator ios-permissions

我有一个在ios模拟器上运行的简单应用程序(将在应用程序的某个时刻),提示用户授权以下内容:

  1. 位置设置
  2. 地址联系簿
  3. 图片/相册
  4. 因为我正在iOS模拟器上进行自动化测试(虚拟机上数千个),有没有办法强制iOS模拟器在安装应用程序时将这些权限设置为yes?

    我依旧记得有一种方法可以使用与iOS模拟器关联的plist文件来操纵它,但我不是百分之百确定“它是否在我脑海中”。我在谷歌上找不到多少。

2 个答案:

答案 0 :(得分:11)

这个主题有一些discussion here。我引用后代的相关部分:

  

对于CoreLocation,您只需调用以下私有方法即可   在你第一次使用之前的某个时刻:

[CLLocationManager setAuthorizationStatus:YES 
                      forBundleIdentifier:[[NSBundle mainBundle] bundleIdentifier]]
     

处理联系人,照片和日历的隐私提醒   不同。这些可以通过TCCAccessSetForBundle来设置   TCC.framework,但此功能无法从中调用   您正在尝试修改AFAICT的隐私设置的相同应用。

     

相反,您只需使用以下权利对应用进行签名即可:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.private.tcc.allow.overridable</key>
    <array>
        <string>kTCCServiceAddressBook</string>
        <string>kTCCServiceCalendar</string>
        <string>kTCCServicePhotos</string>
    </array>
</dict>
</plist>
     

要从模拟器的隐私设置屏幕隐藏您的应用,   用{替换com.apple.private.tcc.allow.overridable   com.apple.private.tcc.allow

     

您可能不想在AppStore中包含这些权利   建立。

(确保在提交应用时将这些内容删除 - 或者只将其包含在调试目标中 - 因为它无法通过应用审核。)

答案 1 :(得分:5)

根据上面Felipe Sabino的评论,我得出以下结论。 iOS for Xcode 6的权限文件存储在~/Library/Developer/CoreSimulator/Devices/<device>/data/Library/TCC/TCC.db位置。所以我们在控制台上使用sqlite3修改db文件。

从终端使用以下Perl脚本。这可以用任何语言完成。

$folderLocations = `xcrun simctl list`; // running "xcrun simctl list" on terminal returns iOS device locations 
$currentUserID = `id -un`;              // get current user
chomp($currentUserID);                  // remove extra white space from user string
print "currentUserID: $currentUserID";  // debug logs

while($folderLocations =~ /iPad Air \((.{8}-.*?)\)/g) { // Use regex to loop through each iPad Air device found in $folderLocations. Insert the permissions in the database of each. 
    print "folderLocations <1>: $1\n";  // debug logs
    `sqlite3 /Users/$currentUserID/Library/Developer/CoreSimulator/Devices/$1/data/Library/TCC/TCC.db "insert into access values('kTCCServiceAddressBook','com.apple.store.MyApp', 0, 1, 0, 0)"`;
    print "\n";  // neat logs
}

此版本会覆盖kTCCServiceAddressBook权限,但也有kTCCServiceCalendarkTCCServicePhotos