macOS 開発の権限問題ガイド
LCC Unity SDK はサードパーティの webP デコードライブラリを使用しているため、macOS で SDK を使用すると「Failed to open xxx.bundle」エラーが発生する場合があります。これは macOS のセキュリティ機構(Gatekeeper)が未認証のサードパーティプラグインの実行をブロックするもので、Unity や SDK 自体とは関係ありません。
このガイドは 2 部構成です。
- パート 1:開発環境でサードパーティライブラリの権限問題を一時的に解決します。
- パート 2:アプリケーションをパッケージ化する際の正式な解決策(一般公開向け)です。
パート 1:開発環境でサードパーティライブラリの権限問題を一時的に解決する
以下の方法は、開発中にバンドルの制限を素早く解除するためのものです。優先順位順にお試しください。
方法 1:システム設定で直接許可する(最速)
| 手順 | 操作 |
|---|---|
| 1 | Mac の System Settings を開き、左側の Privacy & Security を見つけます |
| 2 | 下にスクロールして「Security」セクションを見つけます |
| 3 | 「xxx.bundle was blocked from use」というプロンプトを見つけ、隣の Allow ボタンをクリックします |
| 4 | Unity を再起動し、SDK を再インポートまたは実行します |
方法 2:Terminal で隔離属性を削除する(最も徹底的)
macOS はネットワークからダウンロードしたファイルに com.apple.quarantine 隔離属性を付与します。Terminal コマンドで直接削除できます。
| 手順 | 操作 |
|---|---|
| 1 | Launchpad → Other → Terminal を開きます |
| 2 | コマンドを入力します(末尾のスペースを維持):sudo xattr -rd com.apple.quarantine |
| 3 | エラーが報告された xxx.bundle ファイルを Terminal ウィンドウへ直接ドラッグしてパスを自動補完します |
| 4 | Enter を押し、Mac のログインパスワードを入力します(入力中は表示されませんが正常です) |
| 5 | コマンド完了後に Unity を再起動します |
ヒント:
このコマンドには管理者権限(
sudo)が必要です。パスワード入力中は画面に何も表示されません。入力し終えたら Enter を押してください。
方法 3:実行権限を追加する(補助的)
方法 1 と 2 でも解決しない場合は、バンドルに実行権限を追加します。
chmod -R 755 /path/to/xxx.bundle
バンドルファイルを Terminal にドラッグしてパスを自動補完し、Enter を押して Unity を再起動することもできます。
方法 4:Unity プラグインプラットフォーム設定を確認する
| 手順 | 操作 |
|---|---|
| 1 | Unity の Project ウィンドウで xxx.bundle ファイルを見つけます |
| 2 | 選択して Inspector ウィンドウを確認します |
| 3 | Platform Settings で Any Platform にチェックするか、Standalone / macOS を個別にチェックします |
| 4 | Exclude Platform にチェックが入っていないことを確認します |

Inspector の Platform Settings で Any Platform または macOS にチェック
方法 5:Gatekeeper を一時的に無効化する(最終手段)
警告:
この方法はシステムのセキュリティを低下させます。開発マシンでの一時的な使用のみ推奨します。開発完了後に必ず再有効化してください。
上記のどの方法でも解決しない場合は、システムのセキュリティ検証を一時的に無効化できます。
sudo spctl --master-disable
無効化されたか確認します。
spctl --status
# 正常に無効化されると assessments disabled と表示される
開発完了後にセキュリティ保護を再有効化します。
sudo spctl --master-enable
パート 2:アプリケーションのパッケージ化時のサードパーティライブラリ権限問題の解決
エンドユーザーがサードパーティ SDK を含むアプリケーションを問題を意識せずに使えるようにするには、開発者側で「深いコード署名 + Apple 公証 + Staple チケット結合」を完了する必要があります。これは macOS で唯一の準拠した標準ソリューションで、ユーザー操作がゼロです。
前提条件(すべて必須)
| No. | 条件 | 説明 |
|---|---|---|
| 1 | Apple Developer Program | 年額 99 USD。Developer ID Application 証明書の取得に使用 |
| 2 | Hardened Runtime を有効化 | Unity の Player Settings → Other Settings → Mac で Use Hardened Runtime にチェック |
| 3 | 一意の Bundle ID を設定 | 開発者ポータルと一致させる |
| 4 | Unity の自動署名を無効化 | パッケージ化後に Terminal で手動の深い署名を行います |
完全な署名と公証の手順
手順 1:拡張属性をクリアする
xattr -cr "YourApp.app"
手順 2:深い再帰的署名
--deep パラメータは内部のすべての .bundle、.dylib、.framework ファイルを自動的に走査して一括署名し、未署名が原因でサードパーティバンドルがブロックされる問題を徹底的に解決します。
codesign --force --deep --options runtime --sign "Developer ID Application: YourCompany (TeamID)" "YourApp.app"
重要なポイント:
YourCompany (TeamID)を完全な Developer ID に置き換えてください。--deepを使用すると、内部のすべてのサードパーティバンドルが署名されることが保証されます。これが「署名後もエラーになる」問題の 90% の根本原因です。
手順 3:公証用に標準の zip をパッケージ化する
必ず ditto コマンドでパッケージ化してください。システムの右クリック圧縮は使用しないでください(使用すると公証検証が失敗します)。
ditto -c -k --sequesterRsrc --keepParent "YourApp.app" build.zip
手順 4:Apple へアップロードして公証する
notarytool(公式の新ツール)を使用して公証申請します。Apple のバックエンドが自動的に悪意あるコードをスキャンします。
xcrun notarytool submit build.zip --apple-id your@apple.com --password app-specific-password --team-id TeamID --wait
Accepted が返るのを待ちます。これは公証に合格したことを意味します。
手順 5:公証チケットを App に Staple する
Staple 後は、ユーザーがオフラインで開いても検証に合格します。
xcrun stapler staple "YourApp.app"
# 成功したか確認
xcrun stapler validate "YourApp.app"
内部テスト / 企業イントラネット配布(代替案)
まだ Apple 開発者アカウントがない場合は、以下の方法でイントラネット内に配布できます。
| 手順 | 操作 |
|---|---|
| 1 | Unity が .app をパッケージ化します |
| 2 | ビルドマシンで実行:xattr -rd com.apple.quarantine "YourApp.app" |
| 3 | イントラネットツール(scp、企業クラウドドライブ、USB ドライブ)で配布します。ブラウザでダウンロードしないでください |
制限:
この方法はイントラネット転送のみに適用されます。ブラウザでダウンロードすると隔離属性が再付与され、バンドルエラーが再発します。一般公開には適していません。
よくある失敗
| よくあるミス | 正しい方法 |
|---|---|
--deep なしでメインプログラムのみ署名した | --deep で内部のすべてのバンドル / dylib を再帰的に署名する必要があります |
| Hardened Runtime を有効化していない | Unity パッケージ化前に Player Settings でチェックします。さもないと公証が直接失敗します |
| 公証後にチケットの Staple を忘れた | 必ず xcrun stapler staple を実行します。さもないとオフラインで開く際にダイアログが表示されます |
| 署名前に拡張属性をクリアしていない | 先に xattr -cr を実行して全バンドルの残存属性をクリアし、その後署名します |
ditto の代わりにシステムの右クリック圧縮を使った | 必ず ditto -c -k 標準パッケージ化を使用します。さもないと公証検証が失敗します |
まとめ
一般公開のための唯一の標準ソリューション = Apple Developer ID + 深い codesign + notarytool 公証 + stapler チケット。完了後、ユーザーは即座にダウンロードして使用でき、セキュリティダイアログもなく、問題を意識しません。