iOS*_*com 10 objective-c ios ios-simulator ios-permissions
我有一个在ios模拟器上运行的简单应用程序(将在应用程序中的某个时刻),提示用户授权以下内容:
因为我在iOS模拟器上进行自动化测试(在虚拟机上有数千个),有没有办法强制iOS模拟器在安装应用程序时将这些权限设置为yes?
我依稀记得有一种方法可以使用与iOS模拟器关联的plist文件来操纵它,但我不是百分之百确定"它是否在我脑海中".我在谷歌上找不到太多东西.
Aar*_*ger 11
这里也有一些在这里讨论这个话题.我将引用后人的相关部分:
对于CoreLocation,您可以在第一次使用之前在某个时刻调用以下私有方法:
Run Code Online (Sandbox Code Playgroud)[CLLocationManager setAuthorizationStatus:YES forBundleIdentifier:[[NSBundle mainBundle] bundleIdentifier]]联系人,照片和日历的隐私提醒处理方式不同.这些可以通过
TCCAccessSetForBundlefrom 设置TCC.framework,但是此功能无法在您尝试修改AFAICT的隐私设置的同一应用程序中调用.相反,您只需使用以下权利对应用进行签名即可:
Run Code Online (Sandbox Code Playgroud)<?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版本中包含这些权利.
(确保在提交应用程序时将这些内容删除 - 或者仅将其包含在调试目标中 - 因为它不会通过应用程序审核.)
根据上面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
}
Run Code Online (Sandbox Code Playgroud)
这一个覆盖kTCCServiceAddressBook权限,但也有kTCCServiceCalendar和kTCCServicePhotos.
| 归档时间: |
|
| 查看次数: |
3676 次 |
| 最近记录: |