| #!/usr/bin/env vpython3 |
| |
| # Copyright (c) 2024 The WebRTC Project Authors. All rights reserved. |
| # |
| # Use of this source code is governed by a BSD-style license |
| # that can be found in the LICENSE file in the root of the source |
| # tree. An additional intellectual property rights grant can be found |
| # in the file PATENTS. All contributing project authors may |
| # be found in the AUTHORS file in the root of the source tree. |
| |
| __doc__ = """Generate privacy manifest of WebRTC iOS framework.""" |
| |
| import argparse |
| import plistlib |
| import sys |
| |
| |
| def generate_privacy_manifest(out_file): |
| privacy_manifest = { |
| "NSPrivacyTracking": |
| False, |
| "NSPrivacyCollectedDataTypes": [], |
| "NSPrivacyTrackingDomains": [], |
| "NSPrivacyAccessedAPITypes": [ |
| # For mach_absolute_time usage in rtc_base/system_time.cc |
| { |
| "NSPrivacyAccessedAPIType": |
| "NSPrivacyAccessedAPICategorySystemBootTime", |
| "NSPrivacyAccessedAPITypeReasons": [ |
| # Declare this reason to access the system boot time |
| # in order to measure the amount of time that has elapsed |
| # between events that occurred within the app or to perform |
| # calculations to enable timers. |
| "35F9.1", |
| # Declare this reason to access the system boot time to |
| # calculate absolute timestamps for events that occurred |
| # within your app, such as events related to the UIKit or |
| # AVFAudio frameworks. |
| "8FFB.1", |
| ] |
| }, |
| # For stat usage in rtc_base/file_rotating_stream.cc |
| # TODO: bugs.webrtc.org/337909152 - Make this optional since this |
| # is only used for RTCFileLogger, which is not used by default and |
| # not considered as a core feature. |
| { |
| "NSPrivacyAccessedAPIType": |
| "NSPrivacyAccessedAPICategoryFileTimestamp", |
| "NSPrivacyAccessedAPITypeReasons": [ |
| # Declare this reason to access the timestamps, size, or |
| # other metadata of files inside the app container, app |
| # group container, or the app’s CloudKit container. |
| "C617.1" |
| ] |
| } |
| ] |
| } |
| |
| with open(out_file, 'wb') as file: |
| plistlib.dump(privacy_manifest, file, fmt=plistlib.FMT_XML) |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser(description=__doc__) |
| parser.add_argument("-o", "--output", type=str, help="Output file.") |
| # TODO: bugs.webrtc.org/337909152 - Add an option to not to emit privacy |
| # manifest entries for NSPrivacyAccessedAPICategoryFileTimestamp |
| |
| args = parser.parse_args() |
| |
| if not args.output: |
| print("Output file is required") |
| return 1 |
| |
| generate_privacy_manifest(args.output) |
| |
| return 0 |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main()) |