Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Vimac | 2,956 | 5 months ago | 133 | gpl-3.0 | Swift | |||||
Productive macOS keyboard-driven navigation | ||||||||||
Echoplexus | 393 | 7 years ago | 63 | other | CoffeeScript | |||||
Socket.io powered chat, JavaScript REPL, whiteboard, and WebRTC calls | ||||||||||
Exodus Android App | 389 | 2 days ago | 36 | gpl-3.0 | Kotlin | |||||
εxodus Android application | ||||||||||
Ecprivacychecktools | 172 | 3 years ago | 6 | mit | Objective-C | |||||
iOS 系统隐私权限检测工具。iOS system privacy permission check tools. | ||||||||||
Vwwpermissionkit | 142 | 4 | 3 years ago | 4 | December 12, 2015 | 9 | mit | Objective-C | ||
A visual permission manager for iOS | ||||||||||
Tick.chat | 57 | 4 months ago | 29 | JavaScript | ||||||
Chat via nearby persons. Instant, Secure, Anonymously. 🕶 | ||||||||||
Privacy Friendly Shopping List | 56 | a month ago | 55 | apache-2.0 | Java | |||||
Privacy Friendly App to create and manage shoppings lists on Android devices. | ||||||||||
Privacy Friendly Finance Manager | 30 | 7 days ago | 24 | gpl-3.0 | Java | |||||
Agora Unreal Sdk Blueprint | 25 | 9 months ago | 10 | C++ | ||||||
Agora Unreal SDK - Blueprint (Beta) | ||||||||||
Ios Permissions Service | 22 | 4 years ago | 1 | other | Swift | |||||
An easy way to do permissions requests & handling automatically. |
ECPrivacyCheckTools 2.0.0
20171211 bugiOS11plistNSPhotoLibraryAddUsageDescription
<key>NSPhotoLibraryAddUsageDescription</key>
<string></string>
// ALAuthorizationStatus ALAuthorizationStatusNotDetermined
// alertView
// alertView
__block BOOL isShow = YES;
ALAssetsLibrary *assetLibrary = [[ALAssetsLibrary alloc] init];
[assetLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (isShow) {
[self executeCallBack:accessStatusCallBack accessStatus:ECAuthorizationStatus_Authorized type:ECPrivacyType_Photos];
isShow = NO;
}
} failureBlock:^(NSError *error) {
[self executeCallBack:accessStatusCallBack accessStatus:ECAuthorizationStatus_Denied type:ECPrivacyType_Photos];
}];
LocationServices
Contacts
Calendars
Reminders
Photos
Bluetooth
Microphone
SpeechRecognition >= iOS 10.0
Camera
Health >= iOS 8.0
HomeKit HomeKit >= iOS 8.0
MediaAndAppleMusic Apple Music >= iOS9.3
FilesAndFolders
MotionAndFitness
<key>NSAppleMusicUsageDescription</key>
<string>Add tracks to your music library.</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string></string>
<key>NSBluetoothAlwaysUsageDescription</key>
<string></string>
<key>NSCalendarsUsageDescription</key>
<string></string>
<key>NSCameraUsageDescription</key>
<string></string>
<key>NSContactsUsageDescription</key>
<string></string>
<key>NSHealthShareUsageDescription</key>
<string></string>
<key>NSHealthUpdateUsageDescription</key>
<string></string>
<key>NSHomeKitUsageDescription</key>
<string></string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string></string>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>
<key>NSMicrophoneUsageDescription</key>
<string></string>
<key>NSMotionUsageDescription</key>
<string></string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string></string>
<key>NSPhotoLibraryUsageDescription</key>
<string></string>
<key>NSRemindersUsageDescription</key>
<string></string>
<key>NSSiriUsageDescription</key>
<string>SiriSiri</string>
<key>NSSpeechRecognitionUsageDescription</key>
<string></string>
<key>NSVideoSubscriberAccountUsageDescription</key>
<string>TV</string>
// MARK: - LocationServices
/**
*
* ECLBSAuthorizationStatusUnable
* ECLBSAuthorizationStatusNotDetermined
* ECLBSAuthorizationStatusRestricted:
* ECLBSAuthorizationStatusDenied
* ECLBSAuthorizationStatusAuthorizedAlways
* ECLBSAuthorizationStatusAuthorizedWhenInUse
* ECLBSAuthorizationStatusAuthorizediOS2.0~8.0> iOS 8.0 ECLBSAuthorizationStatusAuthorizedAlways
*/
typedef NS_ENUM(NSInteger, ECLBSAuthorizationStatus) {
ECLBSAuthorizationStatusUnable = -1,
ECLBSAuthorizationStatusNotDetermined = 0,
ECLBSAuthorizationStatusRestricted,
ECLBSAuthorizationStatusDenied,
ECLBSAuthorizationStatusAuthorizedAlways,
ECLBSAuthorizationStatusAuthorizedWhenInUse,
ECLBSAuthorizationStatusAuthorized API_DEPRECATED("Use ECLBSAuthorizationStatusAuthorizedAlways", ios(2.0, 8.0)) = ECLBSAuthorizationStatusAuthorizedAlways
};
///
+ (ECLBSAuthorizationStatus)locationAuthorizationStatus;
///
- (ECLBSAuthorizationStatus)locationAuthorizationStatus;
///
/// @param completionHandler completionHandler
- (void)requestLocationAuthorizationWithCompletionHandler:(void(^)(ECLBSAuthorizationStatus status))completionHandler;
// MARK: - Photos
/**
* ECAuthorizationStatusUnable
* ECAuthorizationStatusNotDetermined
* ECAuthorizationStatusRestricted:
* ECAuthorizationStatusDenied
* ECAuthorizationStatusAuthorized
*/
typedef NS_ENUM(NSInteger, ECAuthorizationStatus) {
ECAuthorizationStatusUnable = -1,
ECAuthorizationStatusNotDetermined = 0,
ECAuthorizationStatusRestricted,
ECAuthorizationStatusDenied,
ECAuthorizationStatusAuthorized
};
///
+ (ECAuthorizationStatus)photosAuthorizationStatus;
///
- (ECAuthorizationStatus)photosAuthorizationStatus;
///
/// @param completionHandler completionHandler
+ (void)requestPhotosAuthorizationWithCompletionHandler:(void(^)(BOOL granted))completionHandler;
// MARK: - Bluetooth
/**
*
* ECCBAuthorizationStateUnknown
* ECCBAuthorizationStateResetting
* ECCBAuthorizationStateUnsupported
* ECCBAuthorizationStateUnauthorized
* ECCBAuthorizationStatePoweredOff
* ECCBAuthorizationStatePoweredOn
*/
typedef NS_ENUM(NSInteger, ECCBAuthorizationState) {
ECCBAuthorizationStateUnknown = 0,
ECCBAuthorizationStateResetting,
ECCBAuthorizationStateUnsupported,
ECCBAuthorizationStateUnauthorized,
ECCBAuthorizationStatePoweredOff,
ECCBAuthorizationStatePoweredOn
};
///
/// @param completionHandler completionHandler
- (void)requestBluetoothAuthorizationWithCompletionHandler:(void(^)(ECCBAuthorizationState state))completionHandler;
// MARK: - Contacts
/**
* ECAuthorizationStatusUnable
* ECAuthorizationStatusNotDetermined
* ECAuthorizationStatusRestricted:
* ECAuthorizationStatusDenied
* ECAuthorizationStatusAuthorized
*/
typedef NS_ENUM(NSInteger, ECAuthorizationStatus) {
ECAuthorizationStatusUnable = -1,
ECAuthorizationStatusNotDetermined = 0,
ECAuthorizationStatusRestricted,
ECAuthorizationStatusDenied,
ECAuthorizationStatusAuthorized
};
///
+ (ECAuthorizationStatus)contactsAuthorizationStatus;
///
- (ECAuthorizationStatus)contactsAuthorizationStatus;
///
/// @param completionHandler completionHandler
+ (void)requestContactsAuthorizationWithCompletionHandler:(void(^)(BOOL granted))completionHandler;
///
/// @param completionHandler completionHandler
- (void)requestContactsAuthorizationWithCompletionHandler:(void(^)(BOOL granted))completionHandler;
- (void)checkLBS:(NSInteger)buttonIndex {
if (buttonIndex == 1) {
ECLBSAuthorizationStatus status = [ECPrivacyCheckGatherTool locationAuthorizationStatus];
ECAlertShow(@"", [NSString stringWithFormat:@"%ld", (long)status], @"", ^{
});
} else {
self.gatherTools = [[ECPrivacyCheckGatherTool alloc] init];
[self.gatherTools requestLocationAuthorizationWithCompletionHandler:^(ECLBSAuthorizationStatus status) {
if (status == ECLBSAuthorizationStatusAuthorizedAlways) {
[ECAlert showConfirmAlertWithMessage:@"" completion:nil];
} else if (status == ECLBSAuthorizationStatusAuthorizedWhenInUse) {
[ECAlert showConfirmAlertWithMessage:@"APP" completion:nil];
} else if ((status == ECLBSAuthorizationStatusRestricted) || (status == ECLBSAuthorizationStatusDenied)) {
[ECAlert showConfirmAlertWithMessage:@"APP" completion:nil];
} else {
NSLog(@"ECLBSAuthorizationStatusNotDetermined,");
}
}];
}
}
///
/// @param completionHandler completionHandler
- (void)requestPhotosAuthorizationWithCompletionHandler:(void(^)(BOOL granted))completionHandler;
- (void)checkPhotos:(NSInteger)buttonIndex {
if (buttonIndex == 1) {
ECAuthorizationStatus status = [ECPrivacyCheckGatherTool photosAuthorizationStatus];
ECAlertShow(@"", [NSString stringWithFormat:@"%ld", (long)status], @"", ^{
});
} else {
[ECPrivacyCheckGatherTool requestPhotosAuthorizationWithCompletionHandler:^(BOOL granted) {
if (granted) {
[ECAlert showConfirmAlertWithMessage:@"" completion:nil];
} else {
[ECAlert showConfirmAlertWithMessage:@"APP" completion:nil];
}
}];
}
}
- (void)checkContact:(NSInteger)buttonIndex {
if (buttonIndex == 1) {
ECAuthorizationStatus status = [ECPrivacyCheckGatherTool contactsAuthorizationStatus];
ECAlertShow(@"", [NSString stringWithFormat:@"%ld", (long)status], @"", ^{
});
} else {
[ECPrivacyCheckGatherTool requestContactsAuthorizationWithCompletionHandler:^(BOOL granted) {
if (granted) {
[ECAlert showConfirmAlertWithMessage:@"" completion:nil];
} else {
[ECAlert showConfirmAlertWithMessage:@"APP" completion:nil];
}
}];
}
}
- (void)checkBluetooth:(NSInteger)buttonIndex {
//
self.bluetoohTools = [[ECPrivacyCheckBluetooth alloc] init];
[self.bluetoohTools requestBluetoothAuthorizationWithCompletionHandler:^(ECCBAuthorizationState state) {
if (state == ECCBAuthorizationStatePoweredOn) {
ECAlertShow(@"", @"", @"", nil);
} else if (state == ECCBAuthorizationStatePoweredOff) {
ECAlertShow(@"", @"", @"", nil);
} else if (state == ECCBAuthorizationStateUnauthorized) {
ECAlertShow(@"", @"", @"", nil);
} else if (state == ECCBAuthorizationStateUnsupported) {
ECAlertShow(@"", @"", @"", nil);
} else if (state == ECCBAuthorizationStateResetting) {
ECAlertShow(@"", @"", @"", nil);
} else {
// ECCBAuthorizationStateUnknown
ECAlertShow(@"", @"", @"", nil);
}
}];
}
######DemoCopy
ECPrivacyCheckTools is available under the MIT license. See the LICENSE file for more info.