公式Twitterクライアントに追加されたイヤな感じの機能
公式Twitterクライアントに、端末にインストールされたアプリリストを取得する機能が追加されました。
Twitterがスマホにインストールされたアプリ一覧の取得を開始予定、設定解除も可能 – GIGAZINE
別に大したアプリを入れているわけじゃないけれど、デフォルト設定で有効にされていてイヤな感じ。早速高木先生がアップを始めたようです。
.@TwitterJP こんにちわ〜o(^^)o 人が電子計算機を使用するに際してその意図に反する動作をさせるべき不正な指令を与える公式アプリのアプデ、すごいですね\(^o^)/
「以下の小さな変更」は何を隠蔽したのですか(・_・)?
pic.twitter.com/vrmkhViFAb
— Hiromitsu Takagi (@HiromitsuTakagi) 2014, 11月 27
iOS用の公式Twitterクライアントでは、TFNTwitterAppGraphというクラスがその辺りの機能を司っているようです。
インストールされているアプリの調査のために、定期的にバックグラウンドタスクが走る作りになっているようですね。
@interface TFNTwitterAppGraph : NSObject { @private BOOL _optinPromptSeenInCurrentSession; TFNTwitterAccount* _account; NSString* _optOutStatus; int _batchSize; int _batchInBetweenDelay; unsigned _backgroundTask; double _longestBatchExecutionDuration; double _longestBatchbatchExecutionStartTime; double _longestBatchbatchExecutionEndTime; } @property(assign, nonatomic) double longestBatchbatchExecutionEndTime; @property(assign, nonatomic) double longestBatchbatchExecutionStartTime; @property(assign, nonatomic) double longestBatchExecutionDuration; @property(assign, nonatomic) unsigned backgroundTask; @property(assign, nonatomic) int batchInBetweenDelay; @property(assign, nonatomic) int batchSize; @property(assign, nonatomic) BOOL optinPromptSeenInCurrentSession; @property(copy, nonatomic) NSString* optOutStatus; @property(assign, nonatomic) __weak TFNTwitterAccount* account; -(void).cxx_destruct; -(void)updateOptInStatus:(BOOL)status responseBlock:(id)block; -(void)optOutStatusWithResponseBlock:(id)responseBlock; -(void)_recordInstalledApps:(id)apps responseBlock:(id)block; -(void)_logLongestBatchExecution; -(void)_checkLongestBatchExecutionWithStartTime:(double)startTime endTime:(double)time; -(void)_endBackgroundTask; -(void)_startBackgroundTask; -(BOOL)_cacheExpired; -(void)_updateLastDetectionDate; -(void)_optInAndDetectInstalledApps; -(void)_handleBatchWithEmbeddedAppsDictionary:(id)embeddedAppsDictionary appIds:(id)ids index:(int)index installedApps:(id)apps; -(void)_detectAppsInBackground; -(void)_readEmbeddedFileWithCompletionBlock:(id)completionBlock; -(void)handleOptInPromptImpression; -(void)detectInstalledAppsIfNecessary; -(void)start; -(id)initWithAccount:(id)account; @end
iOSの公開APIではインストールされているアプリリストを取得する方法はなく、UIApplicationのcanOpenURL:というメソッドでアプリの持つURL Schemeが使用可能かどうかでアプリがインストールされているかどうかを間接的に判断します。(非公開APIとしては、LSApplicationWorkspaceのinstalledApplicationsというものがSpringBoard内に存在します)
「-(void)_handleBatchWithEmbeddedAppsDictionary:〜」というメソッドから、URL Schemeのデータベースを使って総当たりでスキャンするのが分かりますね。
現状では、調査のメソッドが走るたびに2551回UIApplicationのcanOpenURL:が実行されるのでしょう。
app_store_app_data.jsonってファイルに2551個のURLスキームが書いてあるからそれを元にcanOpenURL:をするのかな。
— kishikawa katsumi (@k_katsumi) 2014, 11月 27
設定でオフにできますが、何か嫌な感じなので、TwitterAppGraphPatcherという、TFNTwitterAppGraphを無効化するJailbreak Tweakを作りました。(続きは[Read More]から)
SPONSORED LINK
免責
TwitterAppGraphPatcherは無保証、無サポートです。自己責任でお使いください。
既知の不具合
適当に作ったので、何かおかしかったらすいません。
- -
動作確認環境
iOS 8.1 / iPhone 5s
履歴
- 0.0.1-1 2014.11.28 初版
インストール
いつもの New野良リポジトリ をCydiaに登録後、以下のリンクをタップしてインストールしてください。