変更履歴
v1.9.0(開発中)
重要な変更
- コンテナデータは標準でマウント移行を使用:
ContainersとGroup Containersのディレクトリを、暗号化されていない APFS 外部ドライブの専用ボリュームへ移し、元の場所にマウントします。アプリの署名は保持します。初回起動時にリムーバブルボリュームへのアクセスを許可してください。マウント移行を参照してください。 - サンドボックスアプリの再署名は標準で拒否:旧方式にはクラシックモードの手動有効化と、操作対象の実際のアプリに対するリスク確認が必要です。再署名したアプリは macOS 27 で開けなくなる場合があります。macOS 27 へのアップグレードを参照してください。
- 「Restore Original Signature」を修正:再署名前に元のアプリ全体をバックアップし、作業用コピーで検証してから安全に置き換えます。元の署名とエンタイトルメントの復元に開発元の秘密鍵は不要です。旧形式の記録では同じバージョンの公式の元アプリを選択できます。更新済みのアプリや破損したバックアップを使って強制的に上書きすることはありません。
- 署名の検出と修復案内:元の署名記録と実際のアプリの現在の署名から置き換えを判定し、確認できない場合は別の状態で表示します。行内の修復操作から、旧シンボリックリンクで移行したコンテナデータを先に戻し、バックアップに応じて元のアプリを復元するか公式版を再インストールします。完全なバックアップがあれば先にローカルへ移す必要はありません。通常のスキャンで復元資料は削除しません。
- クラシックデータ移行モード:標準でオフになっており、有効化にはリスク確認が必要です。設定から詳しい説明を開けます。APFS でないドライブを使う場合、コンテナデータは Mac に残せます。macOS 27 では元の署名を保つマウント移行を推奨します。
- macOS 27 以降でログイン時の自動再署名を無効化:設定をオフにし、旧ログインタスクを停止して削除します。処理が完了しない場合は設定から再試行できます。macOS のアップグレード前に AppPorts を更新し、一度開いてください。インストール済みスクリプトにバージョン保護を追加するためで、ダウンロードだけでは更新されません。以前のシステムでは既存の設定を維持します。
- クラシックモード以外では、コンテナディレクトリの「整理」「再リンク」「リンクの詳細」を無効にし、シンボリックリンクの再作成を防ぎます。
改善
- 初回案内と準備状況の確認:フルディスクアクセス、App 管理権限、ストレージを確認し、システム設定へ直接移動できます。完了状態を保存し、設定から再確認できます。
- ディレクトリツリーと行内操作:種類別に親子関係を表示し、アイコンと操作部を拡大してフォルダ内に種類のマークを追加しました。操作を直接選択でき、強制的な中央移動、親子の容量表示の不一致、ボタン配置を修正しました。
- バックアップ更新と後処理の再試行:検証済みの公式更新では新しい復元点を作り、以前の署名バックアップを保管します。復元後に残った後処理は別管理し、再試行でデータを再コピーしません。コピーを残したまま後処理記録だけを削除することもできます。
- 確認ダイアログなどの修正:長文はスクロールでき、キャンセルと Esc の動作を統一しました。操作後にダイアログを正しく閉じ、ログ上限の
100 MBを正しく表示します。ローカルのリンクからの復元では外部の実際のアプリを解決し、誤った同名ファイルの競合を防ぎます。 - 文書とプロジェクト支援:8 言語の移行・修復案内とナビゲーションを更新しました。アプリ情報画面とメニューにスポンサー、ライセンス、プライバシーポリシーへの入口を追加しました。
- 「移行」で条件を確認してから次の操作を案内:接続、形式、暗号化、空き容量を確認します。保存先を選択・変更すると、選択中のディレクトリの確認を続けます。移行可能な場合は容量、許可、ドライブ接続について説明し、条件を満たさない場合は現状維持、別の場所の選択、準備方法の確認を提示します。
- データボリュームを Finder に表示しないように変更:新しいボリュームは
/Volumesに自動マウントせず、nobrowseでマウントします。初期バージョンでマウントしたボリュームは、次回の起動または接続時にその場で非表示にし、マウント解除は不要です。 - 暗号化された APFS ドライブでのマウント移行は現在非対応:新しいボリュームは元のパスワードを引き継がないため、未暗号化のボリュームを黙って作成せず、停止して理由を説明します。
- 移行と復元の前に空き容量を確認:外部ドライブまたはローカルの容量が不足していれば、ボリューム作成やコピーの前に停止します。
- 復元の安全性を向上:マウント解除後は空のマウントポイントだけを削除し、再帰的な削除は行いません。一時ディレクトリは隠し名に変更しました。最終段階で完了しなければ外部ボリュームと記録をそのまま保持し、ローカルのコピーの場所を案内します。
- 管理対象のボリュームだけを操作:マウント、マウント解除、復元の前に、マウントポイントのボリュームの ID を照合します。ログインエージェントと共有するロックを取得できなければ操作を開始しません。移行記録が読めない場合、空の記録として上書きしません。
- ログインエージェントのパスを自動調整:AppPorts の起動ごとにエージェントの参照先を確認し、移動や更新後に自動で変更します。DMG や「ダウンロード」フォルダから直接実行した際の一時的な App Translocation パスでは、新しいマウント移行をブロックし、先に「アプリケーション」へ移すよう案内します。
- macOS 12 など、管理者権限が必要なシステムでのマウント移行は、システムのパスワードダイアログを表示して再試行します。
- ログイン時や外部ドライブの接続時にコンテナボリュームの再接続を試み、背景処理と AppPorts の操作を調整します。完了時刻はドライブの準備とシステムの許可に依存し、すべてのログインアプリより先に完了する保証はありません。管理者認証が必要な旧システムでは AppPorts を開いてマウントを完了してください。
- ログインエージェントがログイン項目の後に回されないように変更:
KeepAlive(失敗時のみ再起動)で実行が必要なことを宣言し、ProcessType: Backgroundを削除しました。ログイン直後はユーザードメインがしばらく on-demand-only モードになるため、以前の定義では launchd により約 20 秒後まで遅延され、ログイン項目のアプリは 3 秒で起動していました。 - システムが先に自動マウントした場合は、自動で再マウント:
diskutil mount -mountPointは、ボリュームが先に/Volumesにマウントされていてもエラーにせず、指定を無視してmountedを出力し、0 を返します。2026-09-21 と 09-23 にそれぞれ一度、コマンドは成功したのにマウントポイントが空で、WeChat が空のディレクトリを読む事象がありました。現在は毎回、目的のパスに実際にマウントされたか検証し、違う場合は/Volumesから解除して再マウントします。最大 3 回試行します。 - 起動時に最も時間がかかる
diskutil問い合わせを削減:システムが先に/Volumes/<卷名>にマウントしたボリュームを、statfsとルートのマーカーでマイクロ秒単位に識別します。実測で 9 秒かかっていたdiskutil infoを省けます。実機では、マウント先の確認から完了までunmountとmountの 2 コマンドだけとなり、約 1 秒でした。 - ドライブがすぐに現れなくても、ログインエージェントが一度で終了しないように変更:プロセス内で
/Volumesの実際の変化を待って再試行します。実測ではボリュームの出現からマウント完了まで約 1 秒でした。イベントが一切ない場合にも 20 秒ごとに再確認し、待機期間は合計 180 秒です。待機中は AppPorts と共有するプロセス間ロックを保持しません。 - 何もすることがないエージェント実行時のログを削減:launchd の
WatchPathsは FSEvents のパスプレフィックスで一致を判定するため、外部ドライブへの書き込みごとにエージェントを起動しますが、その大半では処理がありません。そのような回のログを 3 行だけにし、項目ごとの詳細は実際のマウント、オフライン、失敗時のみ記録します。 - マウント処理の diskutil 呼び出しを半減:ボリュームの接続状態と現在のマウント先を同じ
diskutil infoで取得し、1 ボリュームあたりの問い合わせを 4 回から 2 回に減らしました。起動時は 1 回に約 1 秒かかるため、数秒の短縮になります。 - Spotlight によるボリュームのインデックス作成を停止:作成時にルートへ
.metadata_never_indexを書き込み、システムがすでに作成した.Spotlight-V100を削除します。WeChat の 2 ボリュームで合計 110 MB でした。既存の移行済みボリュームには次回マウント時に追加します。マーカーはボリュームに保持され、復元時にローカルへ戻しません。 - アプリ名や Bundle ID の
CN、mac、desktopなどの一般語が別のコンテナに一致する問題を修正しました。Trae CN に WPS、Termius に QQ Music のデータが表示されるケースを含みます。 - コンテナのパスが
/private/var形式の場合に、サブディレクトリがスキャンされない問題を修正しました。
v1.8.0
新機能
- カスタムローカルスキャンディレクトリ追加:「Mac ローカルアプリ」ヘッダーに「+」ボタンが追加され、追加のローカルアプリスキャンディレクトリを指定できます。JetBrains Toolbox や Steam など、
/Applications以外にアプリをインストールするツールに最適です。追加したディレクトリは保存され、変更を自動監視します(#48)。 - Stub Portal バージョン自動同期:外部ドライブのアプリが App Store で更新された場合、ローカル Stub Portal のバージョン情報が自動的に同期され、macOS Launch Services キャッシュが更新されます。「開く方式」メニューに古いバージョン番号が表示されなくなります(#50)。
- ツールディレクトリ検出を追加:Gradle(
~/.gradle)、Android 開発データ(~/.android)、Flutter/Dart Pub キャッシュ(~/.pub-cache)に対応(#49)。 - ディレクトリ移行を追加:「ディレクトリ移行」タブで任意のユーザーフォルダを追加し、大きなプロジェクト、モデル、素材ライブラリ、ツールキャッシュを外部ストレージへ移行し、後から再リンクまたは復元できます(#54)。
- 保護されたアプリの移行警告を追加:App Store アプリまたは root 所有アプリを移行する前に、自動削除や置換が権限不足で失敗する可能性を警告し、Finder で手動移動してからリンク作成することを提案します(#55)。
改善
- アプリスキャンの高速化:アプリごとの Info.plist 読み取り回数を 7 回から 1 回に削減(インメモリキャッシュにより)、全体的なスキャン速度が大幅に向上。
- スキャンのタイムアウト保護:codesign サブプロセスに 10 秒のタイムアウトを追加し、大きなアプリの署名チェックがスキャンを無期限にブロックすることを防止。
- ディレクトリサイズ計算の安全上限:再帰的なサイズ計算に 50 万ファイルの上限を追加し、Electron などの巨大アプリバンドルの無限走査を防止。
- スキャントレースログ:スキャンループにアプリごとの TRACE ログを追加し、どのアプリでスキャンが遅いか特定しやすく。
- データディレクトリスキャンの精密マッチング:バンドル ID サフィックス抽出ロジックを修正し、
app、com、orgなどの一般的な TLD ワードをフィルタリング。以前はcn.trae.appのようなバンドル ID が 720 以上の無関係なシステムコンテナのスキャンを引き起こしていました。 - ツールディレクトリの再リンク検出を強化:ローカルのツールディレクトリが存在しない一方で、外部ストレージの正規位置に管理ディレクトリが残っている場合、「Needs Relinking(再リンクが必要)」として表示します。外部ストレージを切り替えると状態が自動更新されます。
- ローカライズとアクセシビリティを改善:アプリ、データディレクトリ、カスタムディレクトリのステータス、並び替え/フィルターラベル、設定トグル、ステータスバッジが選択中の言語により一貫して追従し、より明確なアクセシビリティラベルを提供します。
- アプリサイズはセッション単位のキャッシュを使用するようになり、更新後に「計算中」へ戻ったりサイズが消えるケースを減らしました(#55)。
- データ移行のロールバックを安全化:リンク作成前にローカルソースを隠し安全バックアップへリネームします。リンク作成やバックアップ削除に失敗した場合、可能な限りローカルバックアップと外部コピーを保持します(#54)。
修正
- Trae などのアプリのスキャンが極端に遅い問題を修正 — バンドル ID の一般的なサフィックス
appにより~/Library/Containers/の多数の無関係なディレクトリがスキャンされていました。 - App Store 経由で外部アプリが更新された後、ローカル Stub Portal のバージョン情報が更新されず、「開く方式」メニューに古いバージョンが表示される問題を修正。
- 更新ボタンをクリックしても Stub Portal バージョン同期が実行されない問題を修正。
- データディレクトリの再リンクまたは正規化で、外部の通常ファイルをディレクトリとして扱う可能性がある問題を修正。通常ファイルは拒否され、保持されます。
- 一部言語で複数行ダイアログ本文が中国語に戻る問題を修正し、ロシア語 UI 翻訳を補完しました。Stub Portal の「外部ストレージ未接続」システムダイアログもシステム言語に従います(#55)。
v1.7.0
新機能
- 「移行待ち(外へ)」ステータスを追加: ローカルの実アプリのバージョンが外部ストレージ上の同名アプリより新しい場合、AppPorts はそのアプリを「移行待ち(外へ)」として表示し、ローカルの新しいバージョンで外部の古いコピーを置き換えられることを示します。
- データ移行時の再署名確認を追加: アプリコンテナ内のデータを移行する前に、移行完了後に関連アプリへ Ad-hoc 再署名を自動実行するか確認できるようになりました。これにより、コンテナデータ移行後にデータを認識できない、警告が出る、または起動できないリスクを軽減します(#44)。
UI 改善
- 上部ツールバーを再配置: アプリページとデータディレクトリページの切り替えボタンを、よりコンパクトなアイコン + テキスト形式に変更しました。
- データディレクトリページの操作バーを最適化: 「ツールディレクトリ / アプリデータ」切り替え、移行後の再署名トグル、元の署名を復元ボタン、更新ボタンを上部ツールバーに統合しました。
- アプリ状態バッジに「移行待ち(外へ)」を追加し、ローカルバージョンが外部の古いコピーより新しく、置き換え可能なアプリを識別しやすくしました。
- データディレクトリ移行の再署名確認ダイアログをローカライズし、タイトル、本文、ボタンが現在の言語に従って表示されるようにしました。
改善
- アプリ移行の安全戦略を強化: 外部の移行先が既に存在する場合、AppPorts 管理の旧ポータル、古い移行残留物、または現在のアプリが「移行待ち(外へ)」状態である場合にのみ、自動的にクリーンアップして移行を続行します。
- データディレクトリ復旧チェックを強化: ディレクトリサイズの近さではなく、AppPorts metadata が完全に一致する場合のみ自動接続または復旧を行います。
- アプリデータスキャンをより安定化: アプリを素早く切り替えた場合でも、古いスキャンタスクの結果が現在選択中のアプリのデータディレクトリ一覧を上書きしません。
- 管理者コマンドと AppleScript のエスケープを強化: 引用符、バックスラッシュ、空白、日本語や中国語などを含むパスをより安全に処理します。
- ローカライズを改善: 言語切り替え後も一部のヘルプ、プロンプト、データ移行確認が中国語のまま、または翻訳不完全になる問題を修正し、すべての対応言語の翻訳を補完しました(#43)。
修正
- データディレクトリ移行で、外部の実ディレクトリを復旧可能な対象として誤判定する問題を修正。
- アプリ移行時に、外部の同名実アプリを誤って削除する可能性がある問題を修正。
- 外部の古い AppPorts portal / 古い移行残留物を安定して識別・クリーンアップできない問題を修正。
- パスに特殊文字が含まれる場合に AppleScript または管理者コマンドが誤って構築される問題を修正。
- アプリデータ移行中に、バックグラウンド移行または移行後の再署名が切り替え後のアプリを参照する可能性がある問題を修正。
- 「移行待ち(外へ)」ステータスがアプリ一覧にバッジとして表示されない問題を修正。
v1.6.2
- 新規: ログイン時自動再署名。ユーザーがログインするたびに、署名が期限切れの移行済みアプリを自動的に再署名します。手動操作は不要です。デフォルトで有効、設定で無効にできます
- 改善: Stub Portalが旧来のbashスクリプトではなくネイティブMach-Oバイナリランチャーを使用するように変更。Finderで関連ドキュメントをダブルクリックしても外部アプリが開かない問題を修正(#42)
- 改善: Aboutページのレイアウトをスクロール可能なコンテンツエリアに最適化し、ウィンドウサイズが不足時にコンテンツが途切れる問題を修正
- 修正: ネイティブStub Portalが通常のローカルアプリとして誤認識される問題
- 修正: アプリをローカルに戻す際にネイティブStub Portalを正しくクリーンアップできない問題
- 修正: リンク戻し操作中にアプリシェルが完全なアプリとして処理される論理的な不具合
- 修正: AutoResignInstallerがインストール失敗時に静かに成功として報告する問題
v1.6.1
- 修正: データディレクトリ移行後の自動再署名が、ローカルのスタブシェルではなく外部の実アプリを正しく署名するように修正
- 修正: 再署名と署名復元操作が、リンク済みアプリの実パスを正しく解決するように修正
- 修正: リンク済みアプリの「再署名済み」ステータス検出が、外部実アプリの署名ステータスを正しく識別するように修正
- 改善: ログ出力に構造化エラーコードと関連パス情報を追加
v1.6.0
- 移行後のアプリが矢印バッジを表示しなくなった
- 自動更新アプリが移行後に更新によって破損しなくなった
- 移行後の「破損」プロンプトを修正するアプリ署名管理機能を追加
- 外部ストレージの切断時に赤色の「孤立リンク」警告を表示
- macOS 15.1+ ユーザーが App Store アプリを外部ドライブに直接インストール可能に
- データディレクトリ移行の安全性向上: システムディレクトリの誤移行を防止、中断後の自動復旧
- スキャンとサイズ計算の高速化、リストのジャンプが解消
- 外部ストレージへのファイルコピーの安定性向上、中断時のエラーを解消
- アプリステータスバッジの再設計、より豊富な情報とクリック可能な詳細
- リスト更新後にアプリ選択が保持されるように、データディレクトリにツリービューをサポート
- UI の細かな改善: 検索、ソート、グループカード、アイコン読み込みなど
- 火星文言語オプションを追加
- 自動化テストの更新
v1.5.5
- macOS 15.1+ App Store アプリの外部インストールサポートを追加
- 自動再署名機能を追加(データディレクトリ移行後に自動実行)
LocalizationAuditTestsローカライズ監査テストを追加- Stub Portal Info.plist 生成ロジックを改善
- 移行後の一部アプリの Launchpad アイコン消失問題を修正
v1.4.0
- データディレクトリのツリービューを追加
- ツールディレクトリ検出(30以上の開発ツール)を追加
- 診断パッケージエクスポート機能を追加
- 自動更新検出を改善(Chrome、Edge、その他のカスタムアップデーター)
- 移行中断後の自動回復メカニズムを修正
v1.3.0
- データディレクトリ移行機能を追加
- コード署名管理(元の署名のバックアップ/復元)を追加
- Sparkle と Electron アプリの自動検出を追加
- ロック移行保護(
chflags uchg)を改善 - Finder のバッジ表示問題を修正
v1.2.0
- Stub Portal 移行戦略(Deep Contents Wrapper の置き換え)を追加
- iOS アプリ移行サポート(Mac 版 iOS アプリ)を追加
- 一括移行パフォーマンスを改善
- 復元後に一部のアプリが起動できない問題を修正
v1.1.0
- マルチ言語サポート(20以上の言語)を追加
- アプリスイートディレクトリ移行(例:Microsoft Office)を追加
- 外部ストレージオフライン検出を改善
- Deep Contents Wrapper 戦略のシンボリックリンク侵入問題を修正
v1.0.0
- 初回公式リリース
- アプリの外部ストレージへの移行をサポート(Deep Contents Wrapper / Whole App Symlink)
- アプリの復元とリンク管理をサポート
- FolderMonitor リアルタイムファイルシステム監視をサポート
