🔍

Privacy Manifest対応: 理由が求められるAPIを使っているか探すスクリプトを書いた

2024/02/27に公開

いよいよ Privacy Manifest 対応が求められる時期が近づいているが各位いかがお過ごしだろうか。

App Storeへの提出におけるプライバシー要件のアップデート - 最新ニュース - Apple Developer

この対応のうち、「利用するにあたって理由の説明が求められるAPI」が定義された。
2024年春以降、Privacy Manifestに記載がないまま対象のAPIを使っている場合、アプリの申請が受け付けられなくなる。

対象のシグネチャを探す

そこで、自分の関わるプロジェクトに該当の要素が含まれるか探すスクリプトを書いた。

前提

  • BSDgrep (BSD grep, GNU compatible) 2.6.0-FreeBSD

作業ディレクトリは以下の構成になっているものとする。

project_root/
project_root/bin
project_root/bin/今回作ったスクリプト
project_root/src
project_root/src/ソースコードたくさん

スクリプト

#!/bin/bash

readonly ROOT=$(cd $(dirname ${BASH_SOURCE:-$0})/..; pwd)

cd $ROOT

# 使用にあたって理由が求められるAPI
# ref. https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api?language=objc
readonly REQUIRED_REASON_APIS=(
    # File timestamp APIs
    NSFileCreationDate
    creationDate
    NSFileModificationDate
    modificationDate
    fileModificationDate
    NSURLContentModificationDateKey
    contentModificationDateKey
    NSURLCreationDateKey
    creationDateKey
    getattrlist
    getattrlistbulk
    fgetattrlist
    stat
    fstat
    fstatat
    lstat
    getattrlistat
    # System boot time APIs
    systemUptime
    mach_absolute_time
    # Disk space APIs
    NSURLVolumeAvailableCapacityKey
    volumeAvailableCapacityKey
    NSURLVolumeAvailableCapacityForImportantUsageKey
    volumeAvailableCapacityForImportantUsageKey
    NSURLVolumeAvailableCapacityForOpportunisticUsageKey
    volumeAvailableCapacityForOpportunisticUsageKey
    NSURLVolumeTotalCapacityKey
    volumeTotalCapacityKey
    NSFileSystemFreeSize
    systemFreeSize
    NSFileSystemSize
    systemSize
    statfs
    statvfs
    fstatfs
    fstatvfs
    getattrlist
    fgetattrlist
    getattrlistat
    # Active keyboard APIs
    activeInputModes
    # User defaults APIs
    NSUserDefaults
    UserDefaults
)

# echo "${REQUIRED_REASON_APIS[@]}"
# exit

for api_name in "${REQUIRED_REASON_APIS[@]}"; do
    echo "Search $api_name" >&2
    grep -E "$api_name\W" -r $ROOT/src 

    # 目視検査用。緩く広範にマッチさせようとする。
    #grep "$api_name" -r $ROOT/src
done

雑感

  • やっぱりシェルスクリプトなんだよな
  • とはいえシェルスクリプトの配列なんて久々に使った
GitHubで編集を提案

Discussion