Skip to main content

verifyos_cli/rules/
permissions.rs

1use crate::rules::core::{
2    AppStoreRule, ArtifactContext, RuleCategory, RuleError, RuleReport, RuleStatus, Severity,
3};
4
5pub struct CameraUsageDescriptionRule;
6
7impl AppStoreRule for CameraUsageDescriptionRule {
8    fn id(&self) -> &'static str {
9        "RULE_CAMERA_USAGE"
10    }
11
12    fn name(&self) -> &'static str {
13        "Missing Camera Usage Description"
14    }
15
16    fn category(&self) -> RuleCategory {
17        RuleCategory::Permissions
18    }
19
20    fn severity(&self) -> Severity {
21        Severity::Error
22    }
23
24    fn recommendation(&self) -> &'static str {
25        "Add NSCameraUsageDescription to Info.plist with a user-facing reason."
26    }
27
28    fn evaluate(&self, artifact: &ArtifactContext) -> Result<RuleReport, RuleError> {
29        if let Some(plist) = artifact.info_plist {
30            if !plist.has_key("NSCameraUsageDescription") {
31                return Ok(RuleReport {
32                    status: RuleStatus::Fail,
33                    message: Some("Missing NSCameraUsageDescription".to_string()),
34                    evidence: Some("Info.plist has no NSCameraUsageDescription".to_string()),
35                });
36            }
37        }
38
39        Ok(RuleReport {
40            status: RuleStatus::Pass,
41            message: None,
42            evidence: None,
43        })
44    }
45}