Mac」カテゴリーアーカイブ

notarizeで失敗 20201022


notarizeで、またもや失敗、1048エラー。9月にはできたのに...。おそらく契約関係の承認が必要になったのだろうと、Apple Developer Connectionにアサインして、Membershipを見ると、一つあったので承認。それでもまだ1048エラー。次のようなメッセージが返された。

Package Summary:

1 package(s) were not uploaded because they had problems:

/var/folders/7n/535dkwvn2hs_kttq4x17npg40000gr/T/6FA147A3-542B-4559-B2EA-7F446BA71777/Untitled.itmsp – Error Messages:

You must first sign the relevant contracts online. (1048)

2020-10-22 21:05:09.976 altool[8484:1281657] *** Error: You must first sign the relevant contracts online. (1048)

このエラーメッセージにはいつもパニックになる。気を取り直して、ネットで検索したらApple のサポートページがあった。

Notarization error 1048

よく見ると、developerサイトと、appstoreconnectサイトにペンディングのアグリーメントがあるかチェックしろ、と書いてある。appstoreconnectに行ったらペンディングがあったので承認したらnotarizeは成功。

あとでメーラーを見てみたら、次のようなメッセージが来ていた。

このメールに反応していれば問題は起きなかった、はず。

4D macOSでプロジェクトのパッケージ化をやめる

いつも使っているのがMacBook Pro(13-inch 2018)なので、4DのプロジェクトもmacOSで開発している。Windowsで動かす場合もコーディングはmacOS。Windowsを使うのはたまにフォームを調整する時だけだ。最近わかったことだがメイリオフォントを使うとWindowsとほぼ同じレイアウトになる。例えばリストボックスの列幅にはソートマーク表示用に余裕を持たせるなど、少しのケアで調整はいらなくなる。要はmacOSとWindowsで同じフォントを使えば良いのだ。MSゴシックやMS明朝もあるけどこちらは試していない。

さて本題。4D macOS版でプロジェクトを作ると、ストラクチャファイル(「.4DB」ファイル)は「.4dbase」という拡張子がついたフォルダの中に生成される。この. 4dbaseフォルダがmacOSの「パッケージ」だ。パッケージは特殊なフォルダで、アイコンをつけたり、ダブルクリックで中の所定のファイルを開くことができる、macOSが提供してくれる便利?な機能だ。

プロジェクトフォルダはパッケージなので選択しただけでは中は見えない

例えばmacOSのアプリケーションフォルダに並んでいるアプリはダブルクリックすると起動する。アイコンもついてる。実行ファイルのように見えるが実態は「.app」という拡張子がついたパッケージ。多数のファイルで構成されているアプリでもパッケージでまとまっているためにスッキリしている。アプリを起動する時、アプリケーションフォルダを開いて、そこに並んでいるアプリのフォルダを開いて、その中のアプリ本体を見極めてダブルクリックするよりは、アイコンのついた.appをダブルクリックした方が楽だろう。1階層ほじらなくて済む。

4Dのパッケージに話を戻そう。この.4dbaseのアイコンをダブルクリックすると4Dが起動してプロジェクトが開く。4Dでアプリ開発の続きをやるだけなら1階層ほじって.4DBファイルをダブルクリックする必要はない。

リリース時にはストラクチャファイルやデータファイル(「.4DD」ファイル)を操作することになる。ストラクチャファイルを取り出して圧縮したり、開発用のデータファイルを本番データに入れ替えてから圧縮したりする。プロジェクトのパッケージを右クリックして「パッケージの内容を表示」を実行する。ウインドウに表示された.4DBファイルを選択して、ドラッグしたりして移動させてから圧縮する。

パッケージを右クリック

元のフォルダに戻るときはウインドウタイトルを右クリックしてプルダウンメニューを表示させて、階層が1つ上のフォルダを選択する。このようにmacOSで作業するときはパッケージの中に入ったり出たりしている。

ウインドウタイトルを右クリック

これってもしかして面倒臭い?

Windowsに持っていくとパッケージはフォルダとして認識されるし、そもそもパッケージ化が必要なのかを自問してみると、

1)パッケージをダブルクリックしてプロジェクトを開くことはしない
 → パッケージに中の「.4DB」ファイルをDockの4Dアイコンにドロップして開いている。ちなみに現在のDockにはv15からv18までの4Dと4D Serverが並んでいる。

2)「Resources」フォルダ、「WebFolder」フォルダ、「Components」フォルダの中身を操作することは多い

3)データファイルを操作する
 データが巨大なために「.4DD」ファイルを差し替えてから圧縮するプロジェクトもある。

4)いつものことだが頻繁にリリース作業を行っている
 ビルドしてリリースするものもあるが、「.4DB」ファイルと「.4Dindy」ファイルを圧縮して送ることが多い。パッケージの中に入ったり出たりすることになる。

長年付き合ってきて名残惜しい気もするがパッケージは邪魔でしかないという考えに到達した。やめるのは簡単だ。パッケージについている「. 4dbase」という拡張子を削除するだけ。4D的には何も問題はないらしい。現にWindowsではこの機能は使えないし。

やってみたら快適だった。クリックするだけでプロジェクトフォルダに出たり入ったりできる。当たり前だけど。

普通のフォルダ

少しだけ弊害があった。プロジェクトフォルダがわかりにくくなったのだ。今まではアイコンがついていたので識別しやすかったし、パッケージの中は4Dの管理下にあるファイルでその外側は自分で入れたファイル、という境界をはっきりと意識できていたのが薄れてしまった。なるほどパッケージにも一利あったのだ、と思いつつも面倒が減ったからこれでしばらくやってみよう。

4D notarizeその2

2020年4月、4DでビルドしたmacOS Catalina配布アプリを作ったときのメモ。2019年からCatalina用にnotarizeして配布していたのだがそのときの手順どおりにうまくいかない。2020年2月、アップルの方針が変わったらしい。32bitコードが含まれているとnotarizeで承認されない、というのが本題なのだが、本題の前にいくつか障害があって手間取った。思えば2019年は「2ファクター認証」や「Catalinaのためのnotarize」でハマった。障害を乗り越えて安心しているとすぐにまた新たな障害が現れる、いつものことだ。次はハマりたくないと思ってこのメモを書いている。このメモも将来役に立つかどうかはわからないが、ないよりマシだろう。

4Dでビルドするアプリは、Xcodeでビルドするアプリと異なり、ターミナルからcodesign、xcrunを使う。今回のポイントは2段階あって、1段階目はxcrun altool ―notarize-appがエラーになる段階(レベル1)、2段階目はxcrunは成功してUploadedになるのだがnotarizeで承認されない段階(レベル2)。

(レベル1)

xcrun altool –notarize-appが失敗。

本当はここの話の方が長くなるけどさらっと

1)Apple Developer Connectionでライセンスを承認していなかった。 → パスワードとかやばかったけどクリア。承認はオーナーでログイン。

2)AppStore connectに署名サインが必要 You must first sign the relevant contracts online. (1048) → ログインして「有料アプリケーション契約」に署名

3)MojaveでXcode 11.2.1のxcrunが使えない? → MojaveでXcode 10.3をインストールして実行。自分のマシンをCatalinaにしたくないのだ。

4)App用パスワードが無効になっていた → 別のCatalinaマシンでビルドしようとした際にiCloudの同期でおかしくなった? → パスワード再作成

これもxcrunが失敗。「app-specific passwordでサインインしてね。パスワードはappleid.apple.comで作れるよ」と言っている
アップロードが成功した時のメッセージ


(レベル2)

5)notarizeコマンドにHardened Runtimeオプション → オプションをつけた

–options=runtime

6)32bitコードが承認されない

→ ここからの話は長い。

Uploadedになると、notarizeの結果がメールで送られてくる。すぐに結果が見れないのはnotarizeに時間がかかるからだが、実際には数分待たされるだけ。で、結果はログに出力される。not approvedの場合、ログに理由が書いてあるので簡単に対策が立てられるはずだ。レベル1とはハマり方が違って楽勝だろう。まずi386とかログに出てる。

32bitコードが含まれていると承認されない、という話を聞いて、さっそく4Dプロジェクトのデータベース設定で、マルチターゲットコンパイルのチェックをオフと思ったら、ここはチェックされてなかった。次はコンポーネントのプロジェクトをチェック。こちらはマルチターゲットコンパイルがチェックされていたのでオフに。それでも通らない。楽勝ではなさそうだ。

notarizeのlogは、たとえば次のように見る。最初はメールを待っていたのだが、ダメな時のメールにはログを見ろとしか書いてないし、メールを取るまでの手間もあるので、こちらのほうが早く結果を知ることができる。暗号のようなところがuuidで、Uploadedが成功した時のメッセージに出力されているのをコピーして使う。たとえば、

xcrun altool –notarization-info b7229996-bdb8-48d4-82d7-467d5317efdd -u “wataru@jirokichi.jp” –password “@keychain:AC_PASSWORD””

Upload成功後にすぐに実行すると初めは「in progres」、これが出ればUploadのuuidが正しくコピペできたことがわかる。5分後くらいにもう一度実行する。審査が終わっていれば次のような結果が表示される。

nortarize失敗。Package Invalid

反転箇所のURLをコピーしてブラウザで見ると、

      “architecture”: “i386”

のところが32bitコードが含まれている、という意味らしい。

ビルドしたコードに32bitコードが含まれている?もしかして4Dの4D Volume Desktop.appに含まれているのでは?と思ってnotarizeのlogをよく見てみると、そのようだ。まず引っかかったのが「php-fcgi-4d」。次に「InternetCommands」。4D v17.4 mac版には32bitコードが含まれていない、はずなのだが、なぜかビルドした結果の.appには含まれてしまっているようだ。サポートにVoumeDesktopには4D Internet Commands.bundleに含まれている。「Windows」フォルダがあってここにWin32用のコードが含まれている、と聞いてこれをappのパッケージから削除しても結果は変わらず、承認されない。

で、4D v18.1に移行した。コンパイルしてビルド。codesignしてnotarize、あっさり承認された。4D v18 + Catalinaではまた別の変更があって新たな障害となって立ちふさがってくれるのだが...その話はまた後ほど。

参考サイト:

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


4DアプリをNotarizeするぞ、Catalina対応

これまで4Dアプリは、署名つきビルドをすれば、macOS Mojaveまでは、control+クリックで「開く」を選択すれば、実行することができた。

macOS 10.15 Catalinaは厳しい。Appleのいうところの「notarize」をしていないアプリをダウンロードして実行しようとすると、Controlクリックだろうが環境設定のセキュリティでなんとかしようとしても開けない。異常終了させられる。同じアプリをビルドしたマシンで起動させれば正常に動くし、USBで持っていけば別のマシンでも正常に動くのに。つまりアプリそのものは実行可能であるにも拘わらず、ネットから落としてきたというだけで悪者アプリのレッテルを貼ってくれる。

で、notarize。参考資料はここ↓、さすがです。

https://www.rk-k.com/archives/3458

xcodeでビルドするアプリはxcodeがこの辺りを上手いことやってくれるので、実際に何が行われているかはわかりにくい。アールケーさんありがとうございます。ターミナルコマンドでやってくれているのが助かります。4Dアプリにとっては必須ですので。

ここからは4Dアプリの場合:

4D v17.3で署名つきでビルド。まず拡張属性を取り除こう。特にResourcesフォルダとかにネットで管理しているテキストファイルとか画像ファイルを置いている場合は要チェック。まず

xattr -rc 「パス名」

これで「パス名」の中のフォルダの中まで拡張属性を取り除いてくれる。次に4Dをアプリケーションビルド。

治郎吉商店では、できたアプリとデータファイルなどをバンドルして出荷するので、出荷前にアプリを起動してデータファイルを作成。できた出荷用アプリを複製してデータファイル作成用アプリを作って起動。データファイル作成後は複製したアプリを削除。

この出荷用アプリはまだ実行されていないものを使う

出荷フォルダには「お読みください」などのファイルを配置。できたフォルダが次。

これが出荷イメージ

これをディスクユーティリティの機能でdmg化する。ターミナルを起動して、次を実行。圧縮のオプションを使っている。

実行すると ・・・ と表示されて実行しているのがわかる。結構時間がかかる。

ここでも拡張属性に注意。「お読みください」などのファイルを誰かに編集を依頼して、ネットで落とした場合は拡張属性がついてしまうのだ。codesignに失敗することになる。

次はnotarize

このコマンドは成功する時が長い。dmgよりも長い。何も表示されずいきなり終わる。

これでできたのをzip圧縮する。なぜかWordPressのサイトにdmgがアップできないからね。しばらくすると(数分?)Appleからメールが来る。

このケースではビルドのタイムスタンプとメールのタイムスタンプの差はおよそ8分。

ShareDocにアップして、別のCatalinaマシンで試す。Catalinaで動いた!ちなみにアップしたマシンはMojaveでした。

Macで4Dのプロジェクトを署名付きでビルドする アプリ配布編

内容が多いので、準備編とアプリ配布の2回に分けることにした。4Dはv17.1。

4)4Dプロジェクトをビルドして、署名付きアプリを作成

4DにADCのキーを入力して、「署名付きビルド」を実行。

図 4Dのアプリケーションビルドでアプリケーションの「認証名」を入力
図 「DC_Build」フォルダができて、その中の「Final Application」というフォルダに署名付きのアプリができる

5)「xx_Build」フォルダにできたアプリ「A」(xx.app)を複製して「B」(xx.app)を作る。

図 一つ上の「DC_Build」フォルダに複製を作ったところ、左がB、もとのがA

6)アプリ「B」を実行してデータファイル群を作成

「B」を実行すると、4Dとしてはアプリと対になるデータファイル(.4DDファイル)が見つからないため、作成するかどうかダイアログを表示する。これを抑制する手段がない。このダイアログが表示される前にメソッドを実行することができないのだ。アプリの配布形態は自由、方法はいくつもある中で、エンドユーザにこのダイアログを見せるかどうかが大きな分かれ目となる。ユーザにこのダイアログを操作させる場合、好きな場所にデータファイルを保存することができる、というメリットがある。一方で電話やメールでのサポートはやりにくくなる。もう一つ重要なのは、ここで作成した場合のデフォルトフォルダは.appのパッケージの中だということ。パッケージの中に.4DDファイルを作成してしまうと、将来アプリがバージョンアップした場合にユーザの.4DDファイルを誤って消してしまう確率が高くなる。

図 4DDファイルが見つからない場合は、自動的にこのダイアログが表示されてしまう

[作成]をクリックして、「B」と同じフォルダ内にデータファイル群「C」(.4DDファイルなど)を作成。

必要な初期設定データがあればここで.4DDファイルに取り込む。ウチでは起動時に自動的にResourcesフォルダから取り込むようにしているので、「B」を実行すれば初期設定データは自動で登録される。「C」ができたら「B」は削除。4Dアプリは一度実行すると中身が変化してしまうため、「B」は署名情報が不完全なアプリ、つまりネット経由で配布しても起動できないゴミアプリに成り下がってしまうのだ。

7)アプリフォルダ作成

配布したいフォルダ(この場合「会計ジロウ」)を作成、「A」と「C」と「お読みください」「会計ジロウについて」を入れる。一つ上に親のフォルダ(この場合「DC100_mac」)を作っておくとよい。ユーザがdmgファイルをマウントしたときにフォルダをドラッグできて便利。

8)ディスクユーティリティで.dmgファイルを作成

フォルダから作成。イメージフォーマットは「ハイブリッドイメージ(HFS+.ISO/UDF)を選択。ここで圧縮してはいけない。


図 ディスクユーティリティで新規イメージをフォルダから作成
図 dmgファイルのイメージフォーマットは「圧縮」ではなく「ハイブリッドイメージ」で作成

9)codesign -s

.dmgファイルに署名する

例:

codesign -s “Developer ID Application: Jirokichi and Company (7N7LW3N8XG)” /current_projects/4D会計ソフト/prj_v17_dcc/DCv104_mac.dmg

【注意】実際にこのコマンドを使うときは、”Developer …”のところをご自分で取得したキーに置き換えて実行してください。

10)zip圧縮

ようやくここで圧縮してファイルを小さくする。ここまで圧縮はしていない。途中で圧縮してはいけない。

11)サイトにアップロード

12)別のMacでダウンロードして実行

参考:
codesign -s “Developer ID Application: Jirokichi and Company (7N7LW3N8XG)” /current_projects/4D会計ソフト/prj_v17_dcc/DCv104_mac.dmg