You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
3.5 KiB
80 lines
3.5 KiB
#!/bin/bash
|
|
|
|
# Copyright (c) 2025, crasowas.
|
|
#
|
|
# Use of this source code is governed by a MIT-style license
|
|
# that can be found in the LICENSE file or at
|
|
# https://opensource.org/licenses/MIT.
|
|
|
|
set -e
|
|
|
|
# Prevent duplicate loading
|
|
if [ -n "$CONSTANTS_SH_LOADED" ]; then
|
|
return
|
|
fi
|
|
|
|
readonly CONSTANTS_SH_LOADED=1
|
|
|
|
# File name of the privacy manifest
|
|
readonly PRIVACY_MANIFEST_FILE_NAME="PrivacyInfo.xcprivacy"
|
|
|
|
# Common privacy manifest template file names
|
|
readonly APP_TEMPLATE_FILE_NAME="AppTemplate.xcprivacy"
|
|
readonly FRAMEWORK_TEMPLATE_FILE_NAME="FrameworkTemplate.xcprivacy"
|
|
|
|
# Universal delimiter
|
|
readonly DELIMITER=":"
|
|
|
|
# Space escape symbol for handling space in path
|
|
readonly SPACE_ESCAPE="\u0020"
|
|
|
|
# Default value when the version cannot be retrieved
|
|
readonly UNKNOWN_VERSION="unknown"
|
|
|
|
# Categories of required reason APIs
|
|
readonly API_CATEGORIES=(
|
|
"NSPrivacyAccessedAPICategoryFileTimestamp"
|
|
"NSPrivacyAccessedAPICategorySystemBootTime"
|
|
"NSPrivacyAccessedAPICategoryDiskSpace"
|
|
"NSPrivacyAccessedAPICategoryActiveKeyboards"
|
|
"NSPrivacyAccessedAPICategoryUserDefaults"
|
|
)
|
|
|
|
# Symbol of the required reason APIs and their categories
|
|
#
|
|
# See also:
|
|
# * https://developer.apple.com/documentation/bundleresources/describing-use-of-required-reason-api
|
|
# * https://github.com/Wooder/ios_17_required_reason_api_scanner/blob/main/required_reason_api_binary_scanner.sh
|
|
readonly API_SYMBOLS=(
|
|
# NSPrivacyAccessedAPICategoryFileTimestamp
|
|
"NSPrivacyAccessedAPICategoryFileTimestamp${DELIMITER}getattrlist"
|
|
"NSPrivacyAccessedAPICategoryFileTimestamp${DELIMITER}getattrlistbulk"
|
|
"NSPrivacyAccessedAPICategoryFileTimestamp${DELIMITER}fgetattrlist"
|
|
"NSPrivacyAccessedAPICategoryFileTimestamp${DELIMITER}stat"
|
|
"NSPrivacyAccessedAPICategoryFileTimestamp${DELIMITER}fstat"
|
|
"NSPrivacyAccessedAPICategoryFileTimestamp${DELIMITER}fstatat"
|
|
"NSPrivacyAccessedAPICategoryFileTimestamp${DELIMITER}lstat"
|
|
"NSPrivacyAccessedAPICategoryFileTimestamp${DELIMITER}getattrlistat"
|
|
"NSPrivacyAccessedAPICategoryFileTimestamp${DELIMITER}NSFileCreationDate"
|
|
"NSPrivacyAccessedAPICategoryFileTimestamp${DELIMITER}NSFileModificationDate"
|
|
"NSPrivacyAccessedAPICategoryFileTimestamp${DELIMITER}NSURLContentModificationDateKey"
|
|
"NSPrivacyAccessedAPICategoryFileTimestamp${DELIMITER}NSURLCreationDateKey"
|
|
# NSPrivacyAccessedAPICategorySystemBootTime
|
|
"NSPrivacyAccessedAPICategorySystemBootTime${DELIMITER}systemUptime"
|
|
"NSPrivacyAccessedAPICategorySystemBootTime${DELIMITER}mach_absolute_time"
|
|
# NSPrivacyAccessedAPICategoryDiskSpace
|
|
"NSPrivacyAccessedAPICategoryDiskSpace${DELIMITER}statfs"
|
|
"NSPrivacyAccessedAPICategoryDiskSpace${DELIMITER}statvfs"
|
|
"NSPrivacyAccessedAPICategoryDiskSpace${DELIMITER}fstatfs"
|
|
"NSPrivacyAccessedAPICategoryDiskSpace${DELIMITER}fstatvfs"
|
|
"NSPrivacyAccessedAPICategoryDiskSpace${DELIMITER}NSFileSystemFreeSize"
|
|
"NSPrivacyAccessedAPICategoryDiskSpace${DELIMITER}NSFileSystemSize"
|
|
"NSPrivacyAccessedAPICategoryDiskSpace${DELIMITER}NSURLVolumeAvailableCapacityKey"
|
|
"NSPrivacyAccessedAPICategoryDiskSpace${DELIMITER}NSURLVolumeAvailableCapacityForImportantUsageKey"
|
|
"NSPrivacyAccessedAPICategoryDiskSpace${DELIMITER}NSURLVolumeAvailableCapacityForOpportunisticUsageKey"
|
|
"NSPrivacyAccessedAPICategoryDiskSpace${DELIMITER}NSURLVolumeTotalCapacityKey"
|
|
# NSPrivacyAccessedAPICategoryActiveKeyboards
|
|
"NSPrivacyAccessedAPICategoryActiveKeyboards${DELIMITER}activeInputModes"
|
|
# NSPrivacyAccessedAPICategoryUserDefaults
|
|
"NSPrivacyAccessedAPICategoryUserDefaults${DELIMITER}NSUserDefaults"
|
|
)
|
|
|