Search code examples
iosobjective-cios-simulatorios-permissions

iOS permission Alerts - removing or suppressing


I have a simple app running on ios simulator which will (at some point in the app), prompt the user to authorize the following:

  1. Location setting
  2. Address contact book
  3. Pictures/Albums

Because I am doing automation testing on the iOS simulator (several thousand on virtual machines), is there a way to force iOS simulator to have these permissions already set to yes when the app is installed?

I vaguely remember there was a way to manipulate this using a plist file associated with iOS simulator, but I'm not 100% sure if "its all in my head". I'm not finding much on google.


Solution

  • Based on the comment by Felipe Sabino above I worked out the following. The permissions file of iOS for Xcode 6 is stored at location: ~/Library/Developer/CoreSimulator/Devices/<device>/data/Library/TCC/TCC.db. So we modify the db file using sqlite3 on the console.

    Used the following Perl script from terminal. This could be done in any language really.

    $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
    }
    

    This one overrides kTCCServiceAddressBook permission, but there is also kTCCServiceCalendar and kTCCServicePhotos.