質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

2回答

3022閲覧

Mac の Electron + Go アプリに署名するとエラーになる

hachi8833

総合スコア15

Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

4グッド

1クリップ

投稿2016/03/19 07:44

編集2016/03/19 07:50

はじめまして。

Mac の Electron アプリに Go で作ったhttpサーバーをインクルードしたものを作りました。
それ自体は動作するのですが、ストアに掲載するために証明書を取得して署名すると、署名自体は成功するにもかかわらず、実行すると次のエラーで終了します。

LSOpenURLsWithRole() failed with error -10810 for the file pkg/elec.app

いろいろ調べてみたのですが、動かすための方法を突き止められずにいます。どなたか回避方法をご存知でしたら教えていただけますでしょうか。

なお、Electron抜きでGoをMacアプリ化したものは正常に署名できることは確認済みなので、Electronに他のバイナリをインクルードした場合の署名方法(後述のスクリプト)のオプション設定に問題があるのではないかと推測しています。Goそのものはおそらく問題とは無関係ではないかと考えています。

再現用サンプルアプリ

問題を再現するために、別途サンプルアプリを作り、署名ありとなしのアプリをそれぞれ置きました。
https://drive.google.com/folderview?id=0B8jpVsBA-4FrQTBJQkZVdlBMaWc&usp=sharing

  • elec.app_signed.zip(署名したアプリ: 動かない)
  • elec.app_unsigned.zip(署名してないアプリ: 動く)
  • child.plist(entitlementで使った設定)
  • parent.plist(entitlementで使った設定)
  • signing.sh(署名スクリプト: APP_KEYは伏せてあるので、自分のコード署名キー名を指定する必要があります)

アプリの起動シーケンス

アプリは次の段取りで起動します(自分でもイレギュラーだと思います)。
0. アプリを起動する
0. GoのHTTPサーバーが起動する(場所: Contents/MacOS/)
0. そのHTTPサーバーから、同じディレクトリにあるElectronバイナリを起動する
0. Electronが起動し、周辺のヘルパーアプリなども起動される

署名スクリプト

以下は、署名スクリプトsigning.shのコアの部分です。

codesign --deep -fs "$APP_KEY" --entitlements $CHILD $OP "$FRAMEWORKS_PATH/$FW/"

codesign --deep -fs "$APP_KEY" --entitlements $CHILD $OP "$FRAMEWORKS_PATH/$APPSHORT Helper.app/"
codesign --deep -fs "$APP_KEY" --entitlements $CHILD $OP "$FRAMEWORKS_PATH/$APPSHORT Helper EH.app/"
codesign --deep -fs "$APP_KEY" --entitlements $CHILD $OP "$FRAMEWORKS_PATH/$APPSHORT Helper NP.app/"
codesign --deep -fs "$APP_KEY" --entitlements $CHILD $OP "$ENNOBINPATH/$MYELECTRON"
codesign --deep -fs "$APP_KEY" --entitlements $PARENT $OP "$APP_PATH"

追加情報

なおElectronアプリは、以下の「参考」に示したv0.35.6のMAS(Mac App Store)バイナリをベースに、Info.plistを書き換えるなどして使っています。これより新しいバージョンだと署名なしでも動きませんでした。

参考

よろしくお願いします。

khirose, izkn, tatsuya6502, argius👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

自己解決しました。

結論から言うと、child/parentのentitlementはすべて不要でした。アプリ全体に--deep -fsオプションで一度署名するだけでできました(MASバイナリをベースにしているので、それ以外の方法だと該当しないかもしれませんのでご注意ください)。

codesign --deep -fs "$APP_KEY" "$APP_PATH"

entitlementを指定しないといけないのかと思ってあれこれオプションを変えてもまったくだめだったのに、実はこんなにシンプルだったとは...大ハマリでした。

まだストアへのアップロードなどは行っていませんが、署名の問題をクリアできたということでここに記します。

投稿2016/03/19 12:33

hachi8833

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2016/03/20 22:59

解決おめでとうございます。 ついでに質問を解決済みにしていただけると幸いです(^-^)
hachi8833

2016/03/21 00:06

失礼しました。自己解決方法を記入してもステータス変わらないんですね。
argius

2016/03/21 00:34

いえいえ、ご対応ありがとうございました。
guest

0

コメントに自己解決について記入しました。

投稿2016/03/21 00:09

hachi8833

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hachi8833

2016/03/21 00:13

「ベストアンサー」を押さないと「解決済み」にならないことが判明...
hachi8833

2016/03/21 08:25 編集

(追記取り消し)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問