
tl;dr parsecd にエンタイトルメントチェックを追加
CoreParsecLocation は、サードパーティのアプリがユーザーの同意や許可なしにユーザーの正確な位置情報にアクセスできることを示すサンプルアプリケーションです。parsecd/CoreParsec は、ローカライズされた検索候補、ナレッジカード、一時的なユーザー ID などの情報も提供します。幸いなことに、現時点ではユーザー ID が永続化されたり再利用されたりすることはないと考えています。
通常の Frameworks 探索中に、parsecd へのアクティブな NSXPCConnection に気付きました。数日間いじった後、正しいヘッダー情報を偽装すれば、parsecd が任意のアプリケーションからの検索クエリに応答することがわかりました。このケースでは、Spotlight のセッションをセットアップする SPPARSession クラスを使用しました。
最初は、PARResponse オブジェクトが GeoIP ロケーションのみを返すと思っていました(それ自体はあまり役に立ちません)。しかし、数多くの検索クエリを試した後、"restaurants" を検索すると parsecd がユーザーの正確な位置情報を取得することがわかりました。その後、PARReponse オブジェクトを介して位置情報が返されました。
parsec は、ローカライズされたニュース結果や検索候補などの追加情報も返します。現時点では、これらにユーザーを特定できる情報が含まれているとは考えていません。提出後、追加のレスポンスをさらに調査する予定です。
parsecd がどれくらいの頻度で新しい位置情報を要求するかは不明ですが、テスト中にステータスバーに位置情報インジケータは表示されませんでした。Dynamic を使用しています(https://github.com/mhdhejazi/Dynamic にあります)。このライブラリは parsecd を悪用するために必須ではありませんが、ヘッダーが公開されていないサードパーティの API を使用するのを容易にします。parsecd がインターネット接続なしで位置情報を返すかどうかをまだテスト中です。