半年前にYotioSoftのヘルプにも書いたことですが、ミツデスマスをmacOSで実行しようとすると、こんなエラーが出ます。
この実行ファイルは壊れているから、ゴミ箱へ移せとのことです。実際にはアプリが壊れていると言うより拡張属性が壊れているわけで、実行自体は可能です。「アプリが壊れている」というのはちょっとかなり語弊があると思いますが、セキュリティをガチガチにしたいAppleの思惑でもあるのでしょう。これはヘルプに書いたとおりxattr --rc <ファイルパス>
で回避できます。
しかし、このエラーは一昨年の年末に公開した「ミツデスマス」では発生するものの、去年の年末に公開した「サンタ狩りへGO!」や「Albus Box」では発生しません。なんかおかしいなと思って原因を探していたら、重大なことに気づきました。
ミツデスマス、Debugビルドで公開してた事件😱
kwsk
去年の年末に公開した「サンタ狩りへGO!」や「Albus Box」は、きちんとReleaseビルドでビルドしたものを公開しています。これらではGitHubからのダウンロード後、こんな警告が表示されます。
この場合、「OK」を選択して右クリック→「開く」を選択し、
このダイアログが表示されたら「開く」を選べばOK。以降は警告が表示されることなく実行可能です。
しかし、ミツデスマスの場合は違います。「アプリが壊れているから、ゴミ箱へ移せ」というエラーが表示されます。
そこでミツデスマスのXcodeプロジェクトファイルを確認してみると、ミツデスマスだけDebugビルドのまま公開していたのです。
つまりXcodeでビルドした場合、DebugビルドのままWeb上で公開すると「開発元が認証できない」かつ「拡張属性が壊れている」という扱いになり、Releaseビルドで公開すると「開発元が認証できないだけ」という扱いになるということです。
拡張属性やGatekeeperがどのような仕組みかは詳しくは知りませんが、おそらく「DebugビルドかつWebからダウンロードされていて、開発者署名がされていない」状況だと拡張属性に何らかの不整合が現れ、上記のようなエラーが発生するのだと思われます。
なお、検証のためDebugビルドしたAlbus BoxのappファイルをGitHubに置き、ダウンロードして開いてみましたが、こちらでも同様の現象が確認できています。
きちんとReleaseビルドで公開しよう
エラーが出る出ない以前に、Debugビルドはデバッグのために最適化機能が動かないとか、動作が遅くなるとか、リリースする上で不都合な点が多いです。アプリを公開するときは野良アプリであろうがなかろうがReleaseビルドにしてから公開しましょう。
XcodeでのReleaseビルドへの切替方法
まずはXcodeを開き、アプリ名が表示されている部分をクリック。
するとこんなメニューが出てきますので、「Edit Scheme…」を選択。
Schemeの設定が出てきます。ここで、DebugとなっているところをReleaseに変更。
↓
これでOK。あとはいつも通りビルドしてWebでリリースします。
おわりに
正直、DebugビルドとReleaseビルドの違いが原因とは盲点でした。WindowsのVisual Studioなら、ビルドボタンの横に「Debug」か「Release」かが選べるメニューがあるのですぐに気づくのですが、Xcodeでは気づきにくい場所にビルド設定があります。以後気をつけます。
おまけ:Mac版OpenSiv3DでのReleaseビルドについて
ミツデスマスをReleaseビルドでビルドし直そうとしたら、大量のエラーが発生。Debugビルドなら問題なくビルドできるのですが、Releaseビルドだと以下のようにライブラリ関連のエラーが発生します。
この問題、OpenSiv3D v0.4.3で開発した「ミツデスマス」のみで発生し、OpenSiv3D v0.6.3で開発した「サンタ狩りへGO!」や「Albus Box」をビルドするときは特に発生しなかったので、おそらくOpenSiv3Dのバージョンが古いことが原因かと思われます。
OpenSiv3D v0.4.3とv0.6.3の間ではライブラリの仕様が異なりますので、現在、ミツデスマスをv0.6.3に対応するように修正作業中です。修正が完了次第、ミツデスマスをReleaseビルドにて公開しなおします。