Ответ 1
Это просто подсказки, а не решение. Я думал об этом много раз, но никогда не начал реализовывать все это.
-
прежде всего, вы можете рассчитать переданные байты, запрашивающие сетевые интерфейсы, взглянуть на этот ответ SO > для кода и приятное объяснение о сетевых интерфейсах на МО;
-
использовать sysctl или аналогичные системные функции для определения того, какие приложения в настоящее время запущены (и для запуска я имею в виду, что состояние процесса установлено в RUNNING, например, ps или верхние команды на OSX. Никогда не пробовал, я просто предполагаю, что это быть может на iOS, надеясь, что нет проблем с приложением, работающим как непривилегированный пользователь), чтобы вы могли определить, какие приложения запущены, и сохранить статистику трафика для этих приложений. Очевидно, что, учитывая возможность запуска приложений в фоновом режиме, сложно определить, какое приложение переносит данные.
Также можно было бы получить информацию о сетевой активности на процесс/приложение, например nettop на OSX Lion, к сожалению, nettop использует частную инфраструктуру NetworkStatistics.framework, поэтому вы не можете выкопать что-то из ее реализации; - учитывать время;
Мои 2 цента