darwin-arm64プラットフォーム対応#2112
Conversation
|
Test / e2e-test (macos-latest) (pull_request)が失敗した理由は、voicevox_nemo_negineにmacos-arm64ビルドがないためだと思います。今はそのまま進めても良いと思います。 |
Hiroshiba
left a comment
There was a problem hiding this comment.
プルリクエストありがとうございます!!
VOICEVOXをApple Silicon macOSでネイティブに動作させるという根本的な目的は達成しましたし、Universal2アプリをリリースするには大変な労力がかかると予想されるため、このイシューをクローズしても良いと思います。どう思いますか?
賛成です!理由はいくつかあります。
- 労力がかかると予想されるため
- M1 macが発売されてから4年という長めの時間が経過したため
- 今の容量が1.3GBあり、倍の2.6GBになると流石に大きすぎるため
もし容量の問題が解決したらユニバーサル版の開発を頑張っても良いかもと思っていますが、現状だとクローズが良いと思います!
すべて完成しましたが、voicevox_engineが0.20.0をリリースするのを待たなければならないので、今はドラフトです。
0.20-preview.0エンジンを使って正しく動くのであれば、マージしてもOKです!
そして無事に動くことを確認してから、エンジンの0.20.0とエディタ(このリポジトリ)の0.20.0をリリースします。
|
@PickledChair @HyodaKazuaki 以前署名周りの話がちらっと出ていたと思うので、issueを掘り起こしていました。 |
こちらの部分について詳しく説明するつもりだったのですが、うっかり忘れてしまいました😅 |
|
この PR のテストビルドは私の環境でも正常に動作しました。また、macOS 向けビルドにおいて app bundle の構造を適切に整理することは望ましいことだと思います。 ただし、もしその作業を進めるなら、次の理由で別の Issue に切り離して作業を進めた方が良いと感じました:
私も VOICEVOX の app bundle の構造が標準的ではないことを把握していましたが、開発の進めやすさを考慮して、他のプラットフォーム向けに近い構造のまま放置していました(残念なことに bundle の構造について詳しいわけではなく、問題を先送りにしていました)。最近も開発が活発に続いていますが、ファイルの配置については以前より大きな変更の可能性が少なくなってきていると個人的に思うので、この問題について取り組んでも良いタイミングかもしれません。問題解決のモチベーションとしては、bundle の構造についての Apple の文書にあるように、コード署名をするときの問題を避けられることが挙げられます ("If you put content in the wrong location, you may encounter hard-to-debug code signing and distribution problems.") 。 一方で、bundle の構造の整理をどこまで真面目にやるかは論点の1つになると思います。現状でも動作は可能であり、コード署名で問題が発生せず App Store で配布することもない場合は現状で十分という見方もあるからです(これが現在までの私の怠惰な姿勢でした)。 (コード署名の話題で気づいたのですが、今回 |
はい移さないとコード署名が失敗します。本文に書いておいたつもりでしたが、今見たらカットされていましたので修正しました。 |
|
コミットメッセージの本文の誤字を修正するために強制プッシュしました。 |
変更の意図を理解しました! |
HyodaKazuaki
left a comment
There was a problem hiding this comment.
私の環境だとzipファイルvoicevox-macos-arm64-cpu-0.20.0-nix6839-macos-arm64.zipは「壊れているため開けません」と表示されて起動できませんでした
dmgファイルVOICEVOX.0.20.0-nix6839-macos-arm64-arm64.dmgは起動できました。
Universal2 binaryについては私も調べてみましたが、コード署名以外に特にメリットはなさそうです。
そのため、universal2 binaryにする必要は今のところないと考えて良さそうです。
バンドルについては、別のIssueで議論することに賛成です。
個人的には、JREが同梱されているアプリが参考になるのではないかと考えています。
例えばあるJREが同梱されたアプリでは、Pluginsの中にJREが入っていました。
SomeApp.app/Contents/Plugins/Java.runtime
ありがとうございます! コードの署名箇所をzipファイルを生成する前に移動しました。 |
|
新しいリリース: https://github.com/nix6839/voicevox/releases/tag/0.20.0-nix6839-macos-arm64.1 |
| - name: Ad hoc code signing | ||
| if: endsWith(matrix.installer_artifact_name, '-dmg') # macOS | ||
| run: codesign --force --deep -s - prepackage/VOICEVOX.app |
There was a problem hiding this comment.
ちょっとお聞きしたいことがあります!
--force --deepでのcodesignは、署名済みファイルもad-hoc署名で上書きされてしまいますか?
もし上書きされるなら、顕著な問題ではありませんが、避けておきたい問題かもしれません。
--forceでのcodesignが必要なファイルのみad-hoc署名する、ということはできそうでしょうか・・・?
(vv-engine/runだけ署名すれば問題ない・・・?)
難しければ、FIXMEコメントを書きつつ様子見でも良いかもしれません。
There was a problem hiding this comment.
両者の違いを見ると、以下の変更が発生しました。
Contents/_CodeSignature/ディレクトリの追加Contents/MacOS/ディレクトリ内の実行ファイル(README.txtを除く)の最終変更日時とファイルサイズの変更(コード署名されたと推測)
質問に答えると
--force --deepでのcodesignは、署名済みファイルもad-hoc署名で上書きされてしまいますか?
もし上書きされるなら、顕著な問題ではありませんが、避けておきたい問題かもしれません。
他のファイルには問題ありませんが、7zzが既に署名されていた場合は上書きされると推測されます。
--forceでのcodesignが必要なファイルのみad-hoc署名する、ということはできそうでしょうか・・・?
(vv-engine/runだけ署名すれば問題ない・・・?)
.appディレクトリを署名するには--deepフラグが必要であり、この場合、--forceの有無に関わらず上記のような動作をします。したがって、答えは不可能です。
ただし、解決策があります。上記に挙げられた箇所以外では署名が行われないようなので、署名したくないファイルを他の場所(例:Resources、Frameworks、Plugins?(ここはよくわかりませんが))に移動すれば良いと思います。
結局これも.appディレクトリの構造に関することなので、別にFIXMEコメントを書かなくても大丈夫でしょうか?
There was a problem hiding this comment.
他のファイルには問題ありませんが、7zzが既に署名されていた場合は上書きされると推測されます。
7zz の署名情報を確認してみました。7zz は macOS の場合、ビルド時に次のリンクからダウンロードされたものをパッケージに含めます:
Line 42 in b0c800e
この 7zz の署名情報を確認したところ、以下のように Signature=adhoc と表示されているので、今のところ署名を上書きしても問題はないと考えられます。今後証明書を用意してコード署名することがある場合は、むしろ積極的に署名しなければなりません:
$ codesign -dv ./7zz
Executable=/Users/graysuitcase/Downloads/7zz
Identifier=7zz
Format=Mach-O universal (x86_64 arm64)
CodeDirectory v=20400 size=19420 flags=0x20002(adhoc,linker-signed) hashes=604+0 location=embedded
Signature=adhoc
Info.plist=not bound
TeamIdentifier=not set
Sealed Resources=none
Internal requirements=none
There was a problem hiding this comment.
なるほどです!!
そもそも、企業により正しく署名されたファイルがadhoc署名に置き換わってしまう、ということを懸念していました。
今手元で調べてみると、Pythonですらadhoc署名でした。
libonnxruntime.dylibはadhoc署名すらされていませんでした!
つまり「企業により正しく署名されたファイル」はほとんど無い、というふうに考えが変わりました。
@nix6839 情報ありがとうございます!
なるほど、.appの署名は特別だったんですね!!
丁寧にありがとうございます。FIXMEもなくて大丈夫だと思います!
@PickledChair 検証ありがとうございます!
たぶん *.dylib系もadhoc署名されていると思います。もともとadhocか、署名なしだと思いますが 😇
|
@PickledChair
個人的には、そこそこメンテナンス性が高ければ、わりと「動けば良い」と思っています! とはいえ、もし余力があればbundleの理想の形を整理し、そこから現状どうなっているかを把握しておけると嬉しいかもではあります。 (あと個人的に、今の形であればエンジン側をpyinstaller v6にしても大丈夫なのかは若干気になってます。もし大丈夫なのであれば、v6にするissue建てたいな~と!) |
Contents/MacOSフォルダには実行ファイルのみが存在するべきですが、 その他のファイルも含まれていたため、正しい構造ではなく、 コード署名が失敗しました。
Co-Authored-By: Hiroshiba <hihokaruta@gmail.com>
|
最新のメインブランチを基にリベースして強制プッシュ |
|
@nix6839 ちょっとご相談が・・・! ニーズのある機能が実装されたときにSNSで言及しておりまして、今回のプルリクエストもツイートしたいと思っています。 (RPされたり、ユーザーからリプライで届く感謝の言葉をお届けできればという意図と、あと開発者が分かるので新規コミッターの方がOSS開発に興味を持ってくださる導線を増やせればという意図があります・・・!) こんな内容を予定しています・・・! もしXアカウントを載せてもよければ、アカウントを教えて下さい! |
私はXのアカウントを持っていません🥲 GitHubのアカウントはご自由にお願いします! |
|
承知しました! ご報告忘れていました! こちらにてポストさせていただきました!🙏 |


内容
GitHub Actionにdarwin-arm64ビルドを追加しました。
このPRのリリースは次のリンクでご覧いただけます: https://github.com/nix6839/voicevox/releases/tag/0.20.0-nix6839-macos-arm64.1
このPRのリリースは次のリンクでご覧いただけます: https://github.com/nix6839/voicevox/releases/tag/0.20.0-nix6839-macos-arm64関連 Issue
close: #348
VOICEVOXをApple Silicon macOSでネイティブに動作させるという根本的な目的は達成しましたし、Universal2アプリをリリースするには大変な労力がかかると予想されるため、このイシューをクローズしても良いと思います。どう思いますか?その他
すべて完成しましたが、voicevox_engineが0.20.0をリリースするのを待たなければならないので、今はドラフトです。他のコミットに関する説明
Apple Siliconでネイティブに動作するアプリはコード署名がないと動作しないため、アドホック署名を追加しました。
次の部分を修正しました
これは一時的にビルドを動作させるためのコミットです。後で削除する予定です。