Tootleの話
のえる @noellabo@hackers.pub
Tootle for Mastodon、最後の更新であるバージョン1.11.6が2020/04/28公開で、実に5年7ヶ月ぐらい更新されていない……というか放棄されているアプリですが、代わりが見つからないぐらい便利なアプリでもあるんですよね。愛用している人、多いと思います。
Tootle for Mastodon https://apps.apple.com/jp/app/id1236013466
ただ、いかんせん古いので、新しいMastodonの機能に対応していません。単に使えない機能があるだけならいいんですが、未対応の通知がくるとアプリごと落ちるなど、まあつらいところも多いです。
なお、FedibirdはTootleが未対応の通知を送らないようにしてあるので、Fedibirdで使う分には通知で落ちることはありません。
あと、サーバからの通知をTootleで受けるには、Mastodonのサーバが送信してくる通知をAppleの通知サーバにリレーするサーバを運用する必要があるのですが、それがよく遅延したり死んでたりします。まだ存在しつづけていること自体は凄いのですが。
もうひとつ、お金を払って使用したいときに、払う画面で落ちる不具合もあります。回避方法はこちらです。 https://fedibird.com/@noellabo/106287295199341279
それと、プライバシー上の懸念がある、という話もあります。
- プライバシーポリシーが公開されていない
- Tootleに切り替えただけで、クリップボードにアクセスしようとしている、という警告が出る
- 登録サーバ以外のサーバへのアクセスがある
- ソース公開されていないので、これらの動作に実際に問題があるのか検証できない
などです。
登録サーバ以外へのアクセスですが、実際に試してみると、app-measurement.comへのアクセスが確認できます。Google Analytics for Firebase用のテレメトリ収集サーバだそうで、私を特定するIDの他、使用しているiOSのバージョンなどいくつかの情報を送信しています。
だいたいこんな内容でした。私の各種IDについては"REDACTED"に置き換えてあります。
{
"1": {
"1": "1",
"2": [
{
"1": [
{
"1": "_si",
"3": "REDACTED"
},
{
"1": "_sc",
"2": "MainContainerViewController"
},
{
"1": "_o",
"2": "auto"
}
],
"2": "_vs",
"3": "1763811570877",
"4": "1763810755008"
},
{
"1": [
{
"1": "_si",
"3": "REDACTED"
},
{
"1": "_et",
"3": "18273"
},
{
"1": "_sc",
"2": "MainContainerViewController"
},
{
"1": "_o",
"2": "auto"
}
],
"2": "_e",
"3": "1763811589072",
"4": "1763810793699"
},
{
"1": [
{
"1": "_si",
"3": "REDACTED"
},
{
"1": "_pc",
"2": "MainContainerViewController"
},
{
"1": "_sc",
"2": "NotificationListViewController"
},
{
"1": "_o",
"2": "auto"
},
{
"1": "_pi",
"3": "3463156751415373300"
}
],
"2": "_vs",
"3": "1763811589076",
"4": "1763811570877"
},
{
"1": [
{
"1": "_si",
"3": "REDACTED"
},
{
"1": "_et",
"3": "4206"
},
{
"1": "_sc",
"2": "NotificationListViewController"
},
{
"1": "_o",
"2": "auto"
}
],
"2": "_e",
"3": "1763811593279",
"4": "1763811589072"
},
{
"1": [
{
"1": "_si",
"3": "REDACTED"
},
{
"1": "_pc",
"2": "NotificationListViewController"
},
{
"1": "_sc",
"2": "SimpleStatusListViewController"
},
{
"1": "_o",
"2": "auto"
},
{
"1": "_pi",
"3": "3463156751415373300"
}
],
"2": "_vs",
"3": "1763811593281",
"4": "1763811589076"
},
{
"1": [
{
"1": "_si",
"3": "REDACTED"
},
{
"1": "_et",
"3": "2239"
},
{
"1": "_sc",
"2": "SimpleStatusListViewController"
},
{
"1": "_o",
"2": "auto"
}
],
"2": "_e",
"3": "1763811595518",
"4": "1763811593279"
},
{
"1": [
{
"1": "_si",
"3": "REDACTED"
},
{
"1": "_pc",
"2": "SimpleStatusListViewController"
},
{
"1": "_sc",
"2": "NotificationListViewController"
},
{
"1": "_o",
"2": "auto"
},
{
"1": "_pi",
"3": "3463156751415373300"
}
],
"2": "_vs",
"3": "1763811595520",
"4": "1763811593281"
},
{
"1": [
{
"1": "_si",
"3": "REDACTED"
},
{
"1": "_et",
"3": "3396"
},
{
"1": "_sc",
"2": "NotificationListViewController"
},
{
"1": "_o",
"2": "auto"
}
],
"2": "_e",
"3": "1763811598915",
"4": "1763811595518"
},
{
"1": [
{
"1": "_si",
"3": "REDACTED"
},
{
"1": "_pc",
"2": "NotificationListViewController"
},
{
"1": "_sc",
"2": "SimpleStatusListViewController"
},
{
"1": "_o",
"2": "auto"
},
{
"1": "_pi",
"3": "3463156751415373300"
}
],
"2": "_vs",
"3": "1763811598916",
"4": "1763811595520"
},
{
"1": [
{
"1": "_si",
"3": "REDACTED"
},
{
"1": "_et",
"3": "2445"
},
{
"1": "_sc",
"2": "SimpleStatusListViewController"
},
{
"1": "_o",
"2": "auto"
}
],
"2": "_e",
"3": "1763811601360",
"4": "1763811598915"
},
{
"1": [
{
"1": "_si",
"3": "REDACTED"
},
{
"1": "_pc",
"2": "SimpleStatusListViewController"
},
{
"1": "_sc",
"2": "NotificationListViewController"
},
{
"1": "_o",
"2": "auto"
},
{
"1": "_pi",
"3": "3463156751415373300"
}
],
"2": "_vs",
"3": "1763811601362",
"4": "1763811598916"
},
{
"1": [
{
"1": "_si",
"3": "REDACTED"
},
{
"1": "_pc",
"2": "NotificationListViewController"
},
{
"1": "_sc",
"2": "MainContainerViewController"
},
{
"1": "_o",
"2": "auto"
},
{
"1": "_pi",
"3": "3463156751415373300"
}
],
"2": "_vs",
"3": "1763811602276",
"4": "1763811601362"
},
{
"1": [
{
"1": "_si",
"3": "REDACTED"
},
{
"1": "_et",
"3": "1429"
},
{
"1": "_sc",
"2": "MainContainerViewController"
},
{
"1": "_o",
"2": "auto"
}
],
"2": "_e",
"3": "1763811602790",
"4": "1763811601360"
}
],
"3": [
{
"1": "1575080291669",
"2": "_fot",
"4": "1575082800000"
},
{
"1": "1588213347924",
"2": "_ltv_JPY",
"4": "3920000000"
},
{
"1": "1763811602828",
"2": "_lte",
"4": "521484122"
},
{
"1": "1575080291669",
"2": "_fi",
"4": "0"
}
],
"4": "1763811602837",
"5": "1763811570877",
"6": "1763811602790",
"7": "1763810793699",
"8": "ios",
"9": "18.7.1",
"10": "iPhone12,5",
"11": "ja-jp",
"12": "540",
"14": "jp.morilab.MastodonApp",
"16": "1.11.6",
"17": "50400",
"18": "50400",
"21": "REDACTED",
"23": "5171",
"25": "REDACTED",
"26": "1763810793699",
"27": "REDACTED",
"30": "REDACTED",
"31": "1",
"32": "11",
"33": "6",
"35": "1761988583100538"
}
}
ここに、何か盗み出した情報を付加することもできますが、観測したことはありません。基本的にアプリのどの機能がどのぐらい使われているかとか画面遷移などを拾いたい場合に取得する情報です。
見た感じプライバシーを侵害する意図のある設計ではなさそうですが、ソフトウェアの挙動に悪意がないか確かめるのは非常に難しいので、中の亀さん(作者の方)から他の人に権利が譲られない限りは、これまでの言行から各自で判断するしかないと思います。