Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

darwin-arm64プラットフォーム対応 #2112

Merged
merged 4 commits into from
Jun 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 32 additions & 12 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ on:

env:
VOICEVOX_ENGINE_REPO_URL: "https://github.com/VOICEVOX/voicevox_engine"
VOICEVOX_ENGINE_VERSION: 0.19.1
VOICEVOX_ENGINE_VERSION: 0.20-preview.0
VOICEVOX_RESOURCE_VERSION: 0.19.1
VOICEVOX_EDITOR_VERSION:
|- # releaseタグ名か、workflow_dispatchでのバージョン名か、999.999.999-developが入る
Expand Down Expand Up @@ -55,7 +55,8 @@ jobs:
- windows-nvidia-prepackage
- windows-cpu-prepackage
- windows-directml-prepackage
- macos-cpu-prepackage
- macos-x64-cpu-prepackage
- macos-arm64-cpu-prepackage
include:
# Linux NVIDIA GPU
- artifact_name: linux-nvidia-prepackage
Expand Down Expand Up @@ -111,16 +112,26 @@ jobs:
installer_artifact_name: windows-directml-nsis-web
nsis_web_artifact_name: "VOICEVOX.Web.Setup.${version}.${ext}"
os: windows-2019
# macOS CPU
- artifact_name: macos-cpu-prepackage
# macOS CPU (x64)
- artifact_name: macos-x64-cpu-prepackage
artifact_path: dist_electron/mac
voicevox_engine_asset_name: macos-x64
package_name: voicevox-cpu
compressed_artifact_name: voicevox-macos-cpu
compressed_artifact_name: voicevox-macos-x64-cpu
app_asar_dir: prepackage/VOICEVOX.app/Contents/Resources
installer_artifact_name: macos-cpu-dmg
macos_artifact_name: "VOICEVOX.${version}.${ext}"
installer_artifact_name: macos-x64-cpu-dmg
macos_artifact_name: "VOICEVOX.${version}-x64.${ext}"
os: macos-12
# macOS CPU (arm64)
- artifact_name: macos-arm64-cpu-prepackage
artifact_path: dist_electron/mac-arm64
voicevox_engine_asset_name: macos-arm64
package_name: voicevox-cpu
compressed_artifact_name: voicevox-macos-arm64-cpu
app_asar_dir: prepackage/VOICEVOX.app/Contents/Resources
installer_artifact_name: macos-arm64-cpu-dmg
macos_artifact_name: "VOICEVOX.${version}-arm64.${ext}"
os: macos-14

runs-on: ${{ matrix.os }}
steps:
Expand Down Expand Up @@ -194,11 +205,16 @@ jobs:

cp resource/editor/PRIVACYPOLICY.md public/privacyPolicy.md

- name: Overwrite .env.production for Linux and macOS
if: startsWith(matrix.os, 'ubuntu-') || startsWith(matrix.os, 'macos-')
- name: Overwrite .env.production for Linux
if: startsWith(matrix.os, 'ubuntu-')
run: |
$sed -i 's|run.exe|./run|g' .env.production

- name: Overwrite .env.production for macOS
if: startsWith(matrix.os, 'macos-')
run: |
$sed -i 's|vv-engine/run.exe|../Resources/vv-engine/run|g' .env.production

- name: Replace .env.production infomations
run: |
# GTM ID
Expand Down Expand Up @@ -280,10 +296,10 @@ jobs:
run: |
mv voicevox_engine/ prepackage/vv-engine/

- name: Merge VOICEVOX ENGINE into prepackage/VOICEVOX.app/Contents/MacOS/
- name: Merge VOICEVOX ENGINE into prepackage/VOICEVOX.app/Contents/Resources/
if: startsWith(matrix.artifact_name, 'macos-')
run: |
mv voicevox_engine/ prepackage/VOICEVOX.app/Contents/MacOS/vv-engine/
mv voicevox_engine/ prepackage/VOICEVOX.app/Contents/Resources/vv-engine/

- name: Recover file permissions
if: startsWith(matrix.artifact_name, 'linux-') # linux
Expand All @@ -294,7 +310,7 @@ jobs:
- name: Recover file permissions for macOS build
if: startsWith(matrix.artifact_name, 'macos-') # macOS
run: |
chmod +x "prepackage/VOICEVOX.app/Contents/MacOS/vv-engine/run"
chmod +x "prepackage/VOICEVOX.app/Contents/Resources/vv-engine/run"
chmod +x "prepackage/VOICEVOX.app/Contents/Frameworks/VOICEVOX Helper (GPU).app/Contents/MacOS/VOICEVOX Helper (GPU)"
chmod +x "prepackage/VOICEVOX.app/Contents/Frameworks/VOICEVOX Helper (Plugin).app/Contents/MacOS/VOICEVOX Helper (Plugin)"
chmod +x "prepackage/VOICEVOX.app/Contents/Frameworks/VOICEVOX Helper (Renderer).app/Contents/MacOS/VOICEVOX Helper (Renderer)"
Expand All @@ -306,6 +322,10 @@ jobs:
if: startsWith(matrix.artifact_name, 'macos-')
run: mkdir -p prepackage/VOICEVOX.app/Contents/Resources/ja.lproj prepackage/VOICEVOX.app/Contents/Resources/en.lproj

- name: Ad hoc code signing
if: endsWith(matrix.installer_artifact_name, '-dmg') # macOS
run: codesign --force --deep -s - prepackage/VOICEVOX.app
Comment on lines +325 to +327
Copy link
Member

@Hiroshiba Hiroshiba Jun 3, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ちょっとお聞きしたいことがあります!

--force --deepでのcodesignは、署名済みファイルもad-hoc署名で上書きされてしまいますか?
もし上書きされるなら、顕著な問題ではありませんが、避けておきたい問題かもしれません。

--forceでのcodesignが必要なファイルのみad-hoc署名する、ということはできそうでしょうか・・・?
vv-engine/runだけ署名すれば問題ない・・・?)

難しければ、FIXMEコメントを書きつつ様子見でも良いかもしれません。

Copy link
Contributor Author

@nix6839 nix6839 Jun 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • コード署名前のファイル情報:
    コード署名前のファイル情報
  • コード署名後のファイル情報:
    コード署名後のファイル情報

両者の違いを見ると、以下の変更が発生しました。

  • Contents/_CodeSignature/ディレクトリの追加
  • Contents/MacOS/ディレクトリ内の実行ファイル(README.txtを除く)の最終変更日時とファイルサイズの変更(コード署名されたと推測)

質問に答えると

--force --deepでのcodesignは、署名済みファイルもad-hoc署名で上書きされてしまいますか?
もし上書きされるなら、顕著な問題ではありませんが、避けておきたい問題かもしれません。

他のファイルには問題ありませんが、7zzが既に署名されていた場合は上書きされると推測されます。

--forceでのcodesignが必要なファイルのみad-hoc署名する、ということはできそうでしょうか・・・?
vv-engine/runだけ署名すれば問題ない・・・?)

.appディレクトリを署名するには--deepフラグが必要であり、この場合、--forceの有無に関わらず上記のような動作をします。したがって、答えは不可能です。

ただし、解決策があります。上記に挙げられた箇所以外では署名が行われないようなので、署名したくないファイルを他の場所(例:ResourcesFrameworksPlugins?(ここはよくわかりませんが))に移動すれば良いと思います。

結局これも.appディレクトリの構造に関することなので、別にFIXMEコメントを書かなくても大丈夫でしょうか?

Copy link
Member

@PickledChair PickledChair Jun 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

他のファイルには問題ありませんが、7zzが既に署名されていた場合は上書きされると推測されます。

7zz の署名情報を確認してみました。7zz は macOS の場合、ビルド時に次のリンクからダウンロードされたものをパッケージに含めます:

url = "https://www.7-zip.org/a/7z2107-mac.tar.xz";

この 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

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

なるほどです!!

そもそも、企業により正しく署名されたファイルがadhoc署名に置き換わってしまう、ということを懸念していました。
今手元で調べてみると、Pythonですらadhoc署名でした。
libonnxruntime.dylibはadhoc署名すらされていませんでした!
つまり「企業により正しく署名されたファイル」はほとんど無い、というふうに考えが変わりました。

@nix6839 情報ありがとうございます!

なるほど、.appの署名は特別だったんですね!!
丁寧にありがとうございます。FIXMEもなくて大丈夫だと思います!

@PickledChair 検証ありがとうございます!
たぶん *.dylib系もadhoc署名されていると思います。もともとadhocか、署名なしだと思いますが 😇


- name: Create Linux tar.gz (without nvidia)
if: startsWith(matrix.artifact_name, 'linux-') && !contains(matrix.artifact_name, 'nvidia')
run: |
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,9 @@ jobs:
voicevox_engine_asset_name: linux-cpu
- os: macos-latest
voicevox_engine_asset_name: macos-x64
# TODO: voicevox_nemo_negineがarm64に対応したら変更する
# - os: macos-latest
# voicevox_engine_asset_name: macos-arm64
- os: windows-latest
voicevox_engine_asset_name: windows-cpu
steps:
Expand Down
4 changes: 3 additions & 1 deletion electron-builder.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ const WIN_SIGNING_HASH_ALGORITHMS = process.env.WIN_SIGNING_HASH_ALGORITHMS

const isMac = process.platform === "darwin";

const isArm64 = process.arch === "arm64";

// electron-builderのextraFilesは、ファイルのコピー先としてVOICEVOX.app/Contents/を使用する。
// しかし、実行ファイルはVOICEVOX.app/Contents/MacOS/にあるため、extraFilesをVOICEVOX.app/Contents/ディレクトリにコピーするのは正しくない。
// VOICEVOX.app/Contents/MacOS/ディレクトリにコピーされるように修正する。
Expand Down Expand Up @@ -154,7 +156,7 @@ const builderOptions = {
target: [
{
target: "dmg",
arch: ["x64"],
arch: [isArm64 ? "arm64" : "x64"],
},
],
},
Expand Down
Loading