CatalinaとGatekeeper

4D 17.3と17R5は、なんとかCatalinaで起動するようになったのですが、これでコンパイル、ビルドしたアプリケーションがCatalinaのGatekeeperを突破できません。
17.3の方は、ダブルクリックで阻止され、コンテキストメニューからの開くで開いても、起動せずに終了してしまいます。
17R5の方も、ダブルクリックで阻止され、コンテキストメニューからの開くで開くのですが、ストラクチャーがリードオンリーですとなって起動できません。

ビルドと署名は、少々古いSierraで行ってるのですが、それが原因でしょうか。
mojaveまではこの方法で問題なくGatekeeperを通過していたのですが…

CatalinaのGateKeeperは,従来の署名に加え,
Notarization (公証) もチェックするようになったので,

Mojaveでcodesignを実行し,
hardened runtime entitlementで署名する必要があったと理解しています。

参考:

https://miyako.github.io/2019/10/03/4d-plugin-capture-v2.html
https://github.com/miyako/4d-utility-build-application

情報ありがとうございました。
サンプルDBもとても参考になりました。
おかげさまで、Catalinaでも問題なくGateKeeperを通過できました。

以下、参考までに具体的な方法です。
*必要な環境
macOS Mojave 10.14.6
Xcode11.1
4D17.3 build 17.242526以上

*事前準備
AppleIDからApp用パスワードを発行し、キーチェーンに登録
https://support.apple.com/ja-jp/apple-id
から、Apple ID アカウントの管理ページに入って、セキュリティからApp用パスワードのパスワード生成のリンク
次にターミナルで
security add-generic-password -a “(Account)” -w (secret-password) -s “AC_PASSWORD”
(Account)はAppleIDのアカウント
(secret-password)は生成したパスワード
AC_PASSWORDは識別名なのでなんでもいい。そのままで大丈夫

実行すると、キーチェーンのログインのところにAC_PASSWORDの名前でパスワードが登録される。

*ビルド
4Dでアプリケーションをビルド。必ず署名付きでビルド

以下、ターミナルを使うので、事前に必ず
sudo xcode-select -s /Applications/Xcode.app
を実行し、ログインパスワードをいれてXcodeをアクティブにする。

*アプリパッケージの編集
必要ならアプリパッケージ内の編集。暫定データファイルの登録やリソースの追加など
パッケージ内を修正した場合は、
codesign -f -s “Developer ID Application: xxxxx” アプリ名.app
で、署名を書き換えておく
spctl -a -t exec -vv アプリ名.app
で、念のため署名を確認
Developer IDが表示されれば問題なし。

*配布アーカイブの用意
配布用アーカイブをを用意。配布用のフォルダに署名したアプリ、ドキュメント等を入れる。
ディスクユーティリティーでディスクイメージ(.dmg)を作成する。
hdiutil create -format UDBZ -plist -srcfolder 配布フォルダ 配布名.dmgで作っても良い

できたdmg ファイルを以下のコマンドで署名
codesign -s “Developer ID Application: xxxxx” 配布名.dmg
念のため、
spctl --assess --type open --context context:primary-signature -vv 配布名.dmg
で署名を確認、Developer IDが表示されれば問題なし。

*公証(Notarization)
公証の実行前にApple Developerのサインインしておくことをお勧めする。改定された規約に同意していないとxcrunがエラーになる。1048エラー、最初原因がわからず苦労した。

ターミナルで以下のコマンドを実行
xcrun altool --notarize-app --primary-bundle-id “(bundle_id)” --username “(Account)” --password “@keychain:AC_PASSWORD” --file 配布名.dmg

(bundle_id)はアプリを識別するID、アプリやバージョンが識別できればなんでもいい、公証で発行されるチケットはこのidで識別される。例)com.hogehoge.hogeApp.v010.001
(Account)はAppleID(Apple Developer)のアカウント
AC_PASSWORDは事前準備でキーチェーン登録した識別名。
配布名は、カレントディレクトリなら名前だけでいい。フルパス名でもOK

アプリのサイズによるが、5〜20分程度で、登録が完了する。
署名、アーカイブに問題がなければ、

No errors uploading ‘配布名.dmg’.
RequestUUID = (GUID)

と返事がくる。数分後にアカウントのアドレス宛に、配布可能になったというメールが届く
エラーがある場合、ずらずらとレポートがターミナルに返されるので、それを参考にする。署名が正しければ問題はないはず。

あとは、通常通りサイト等にアップし配布する。

xcrun altool --notarization-history 0 -u “(Account)” -p “@keychain:AC_PASSWORD”
で登録済みのアプリの一覧を取得できる。
ちなみに編集方法は不明。無効化できるはずであるがわからない。

いろいろテストしてみた結果、ドキュメントの記載より現状のGateKeeperの動作は緩和されているかもしれません。
Hardened Runtime Entitlementsを特に付与しないくてもいい。(もしかすると4D自体に付与済みなのかも)
アプリパッケージ内にはサインされていない実行形式ファイルが存在するが、エラーにならない
最初からアプリケーションフォルダ以外の場所にインストールしても起動できる
チケットをアプリにホチキス止めしなくても、オフラインでGateKeeperの検証を通過できる。

以上です。

詳細で包括的なレポートありがとうございました♪

: Kenichi YAJIMA

ドキュメントの記載より現状のGateKeeperの動作は緩和されて

Catalina ベータ期は,エラーになったのですが,
2020年2月までの一時的な措置ということで,
ある程度の不合格はwarning扱いで公証にパスするみたいです。

Catalina ベータ期は,エラーになったのですが

ということは2月以降は、より厳密に対応しないといけないということですかぁ…
とりあえず今は動いているのでいいですが、ドキュメント調べまくってもわからないことが多くて困ってます。

CodeSignについても、フォルダの中に実態としてCodeSignができる場合とinfo.plistみたく拡張ファイル属性の中にそれみたいなものができる場合もあるし、どこまでcodesignをすればいいのかもわからないんですよねぇ。
サンプルではかなり深くまで署名していますし。
できれば、ビルドした時点で必要なcodesignが済んでると助かるのですが。(^^

また、Entitlementsの扱いがよくわかりません。
サンプルDBのTESTメソッドをトレースしてみると、XMLの辞書形式ファイルを作りそれのパスをcodesignに渡すようですが、その辺りがよく理解できないんです。ドキュメントもみつけられなくて。AppleのはXcodeで自動的に付与されるような記述ばかりで、内容にふれた文書をみおつけられていません。

こんにちは

下記のブログ記事に少し情報をまとめてみました。

https://miyako.github.io/2019/10/16/notarization.html

参考になれば幸いです。。

Please, there is no English version?

Thank you.

:mrgreen:

ビルド用コードを更新しました。
https://github.com/miyako/4d-utility-build-application

MeCabが署名できていなかった問題(日本語版特有)等が修正されています。