|  | #!/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()) |