Skip to content

Commit

Permalink
move generate_privacy_manifest!
Browse files Browse the repository at this point in the history
  • Loading branch information
tido64 committed Apr 30, 2024
1 parent 79bdc3f commit fc21d3d
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 61 deletions.
20 changes: 20 additions & 0 deletions ios/pod_helpers.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
require('json')

def app_manifest(project_root)
@app_manifest ||= {}
return @app_manifest[project_root] if @app_manifest.key?(project_root)

manifest_path = find_file('app.json', project_root)
return if manifest_path.nil?

@app_manifest[project_root] = JSON.parse(File.read(manifest_path))
end

def assert(condition, message)
raise message unless condition
end
Expand Down Expand Up @@ -38,6 +50,14 @@ def new_architecture_enabled?(options, react_native_version)
options[:fabric_enabled] || options[:turbomodule_enabled])
end

def platform_config(key, project_root, target_platform)
manifest = app_manifest(project_root)
return if manifest.nil?

config = manifest[target_platform.to_s]
config[key] if !config.nil? && !config.empty?
end

def resolve_module(request, start_dir = Pod::Config.instance.installation_root)
@module_cache ||= {}
return @module_cache[request] if @module_cache.key?(request)
Expand Down
47 changes: 47 additions & 0 deletions ios/privacy_manifest.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
require('cfpropertylist')

require_relative('pod_helpers')

# https://developer.apple.com/documentation/bundleresources/privacy_manifest_files
PRIVACY_ACCESSED_API_TYPES = 'NSPrivacyAccessedAPITypes'.freeze
PRIVACY_COLLECTED_DATA_TYPES = 'NSPrivacyCollectedDataTypes'.freeze
Expand All @@ -10,3 +14,46 @@
PRIVACY_ACCESSED_API_CATEGORY_FILE_TIMESTAMP = 'NSPrivacyAccessedAPICategoryFileTimestamp'.freeze
PRIVACY_ACCESSED_API_CATEGORY_SYSTEM_BOOT_TIME = 'NSPrivacyAccessedAPICategorySystemBootTime'.freeze
PRIVACY_ACCESSED_API_CATEGORY_USER_DEFAULTS = 'NSPrivacyAccessedAPICategoryUserDefaults'.freeze

def generate_privacy_manifest!(project_root, target_platform, destination)
privacy = {
PRIVACY_TRACKING => false,
PRIVACY_TRACKING_DOMAINS => [],
PRIVACY_COLLECTED_DATA_TYPES => [],
PRIVACY_ACCESSED_API_TYPES => [
{
PRIVACY_ACCESSED_API_TYPE => PRIVACY_ACCESSED_API_CATEGORY_FILE_TIMESTAMP,
PRIVACY_ACCESSED_API_TYPE_REASONS => ['C617.1'],
},
{
PRIVACY_ACCESSED_API_TYPE => PRIVACY_ACCESSED_API_CATEGORY_SYSTEM_BOOT_TIME,
PRIVACY_ACCESSED_API_TYPE_REASONS => ['35F9.1'],
},
{
PRIVACY_ACCESSED_API_TYPE => PRIVACY_ACCESSED_API_CATEGORY_USER_DEFAULTS,
PRIVACY_ACCESSED_API_TYPE_REASONS => ['CA92.1'],
},
],
}

user_privacy_manifest = platform_config('privacyManifest', project_root, target_platform)
unless user_privacy_manifest.nil?
tracking = user_privacy_manifest[PRIVACY_TRACKING]
privacy[PRIVACY_TRACKING] = tracking unless tracking.nil?

[
PRIVACY_TRACKING_DOMAINS,
PRIVACY_COLLECTED_DATA_TYPES,
PRIVACY_ACCESSED_API_TYPES,
].each do |field|
value = user_privacy_manifest[field]
privacy[field] += value if value.is_a? Enumerable
end
end

plist = CFPropertyList::List.new
plist.value = CFPropertyList.guess(privacy)
plist.save(File.join(destination, 'PrivacyInfo.xcprivacy'),
CFPropertyList::List::FORMAT_XML,
{ :formatted => true })
end
61 changes: 0 additions & 61 deletions ios/test_app.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,6 @@
require_relative('pod_helpers')
require_relative('privacy_manifest')

def app_manifest(project_root)
@app_manifest ||= {}
return @app_manifest[project_root] if @app_manifest.key?(project_root)

manifest_path = find_file('app.json', project_root)
return if manifest_path.nil?

@app_manifest[project_root] = JSON.parse(File.read(manifest_path))
end

def app_config(project_root)
manifest = app_manifest(project_root)
return [nil, nil, nil] if manifest.nil?
Expand All @@ -41,14 +31,6 @@ def autolink_script_path(project_root, target_platform)
File.join(package_path, 'native_modules')
end

def platform_config(key, project_root, target_platform)
manifest = app_manifest(project_root)
return if manifest.nil?

config = manifest[target_platform.to_s]
config[key] if !config.nil? && !config.empty?
end

def nearest_node_modules(project_root)
path = find_file('node_modules', project_root)
assert(!path.nil?, "Could not find 'node_modules'")
Expand Down Expand Up @@ -168,49 +150,6 @@ def generate_info_plist!(project_root, target_platform, destination)
plist.save(infoplist_dst, CFPropertyList::List::FORMAT_XML, { :formatted => true })
end

def generate_privacy_manifest!(project_root, target_platform, destination)
privacy = {
PRIVACY_TRACKING => false,
PRIVACY_TRACKING_DOMAINS => [],
PRIVACY_COLLECTED_DATA_TYPES => [],
PRIVACY_ACCESSED_API_TYPES => [
{
PRIVACY_ACCESSED_API_TYPE => PRIVACY_ACCESSED_API_CATEGORY_FILE_TIMESTAMP,
PRIVACY_ACCESSED_API_TYPE_REASONS => ['C617.1'],
},
{
PRIVACY_ACCESSED_API_TYPE => PRIVACY_ACCESSED_API_CATEGORY_SYSTEM_BOOT_TIME,
PRIVACY_ACCESSED_API_TYPE_REASONS => ['35F9.1'],
},
{
PRIVACY_ACCESSED_API_TYPE => PRIVACY_ACCESSED_API_CATEGORY_USER_DEFAULTS,
PRIVACY_ACCESSED_API_TYPE_REASONS => ['CA92.1'],
},
],
}

user_privacy_manifest = platform_config('privacyManifest', project_root, target_platform)
unless user_privacy_manifest.nil?
tracking = user_privacy_manifest[PRIVACY_TRACKING]
privacy[PRIVACY_TRACKING] = tracking unless tracking.nil?

[
PRIVACY_TRACKING_DOMAINS,
PRIVACY_COLLECTED_DATA_TYPES,
PRIVACY_ACCESSED_API_TYPES,
].each do |field|
value = user_privacy_manifest[field]
privacy[field] += value if value.is_a? Enumerable
end
end

plist = CFPropertyList::List.new
plist.value = CFPropertyList.guess(privacy)
plist.save(File.join(destination, 'PrivacyInfo.xcprivacy'),
CFPropertyList::List::FORMAT_XML,
{ :formatted => true })
end

def react_native_pods(version)
if version.zero? || version >= v(0, 71, 0)
'use_react_native-0.71'
Expand Down

0 comments on commit fc21d3d

Please sign in to comment.