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

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 

Macで4Dのプロジェクトを署名付きでビルドする 準備編

内容が多いので、準備編とアプリ配布の2回に分けることにする。

このところ毎週、多いときは毎日のようにこの手順を実行している。道具と手順が多めで、慣れていても間違える時があるし、あとあと誰かに伝えるときにまとめ直すのも大変そうだから今のうちにブログに書いておく。

署名付きビルドを達成する道順は1つではない。アプリの出荷形態によっても異なる。うちの4Dアプリはデータファイルをバンドルして出荷する形が主流で、データファイルはアプリの横に置くようにしている。これはアプリのアップデートの際に、ユーザがデータファイルを識別しやすいと考えたからである。

4Dアプリは起動すると、On Startupメソッドが実行される前にデータファイル(.4DDファイル)を必要とする。もしデータファイルが認識可能なフォルダにない場合、作成するかどうかのダイアログが表示されて、ユーザが任意の場所にデータファイルを作成してしまうかもしれない。これを避けるために出荷時のファイル構成にデータファイルを加えておき、そこに起動時に必要な最低限のデータを格納しておく。例えば郵便番号とか、デフォルトの設定とか。

この出荷形態を前提に署名付きビルドの手順を示す。

用意するもの

  • ビルドしたい4Dプロジェクト
  • ビルドマシン:今回はMacBook Pro (13-inch, 2018)、macOS Mojave

ADCがらみは一度取得すればマシンを変えない限りずっと使える。ライセンス付き4Dは1年間有効のデベロッパー契約を結んでいる。

  • 開発者アカウント(ADC(developer.apple.com)、iTunes Connect)
  • ADCから発行された「Developer ID Application」
  • 4D Developer License付きの4D

キーチェインアクセス、ディスクユーティリティー、ターミナルは、macOSに同梱されているので、ドックにドラッグしておくとよい。

  • 「キーチェインアクセス」アプリケーション
  • 「ディスクユーティリティー」アプリケーション
  • 「ターミナル」アプリケーション

1)iTunes Connectにログインして、開発者のキーを取得

2)キーチェインアクセスでビルドマシン固有のキーを作成

3)ターミナルで「xattr -c -r」を実行して拡張属性を取り除く

ビルドする前に、4Dのプロジェクトが入っているフォルダーの中身のファイル全部の拡張属性を取り除く。

拡張属性はファイルをネットからダウンロードした際にmacOSが自動的に設定するもの。ビルドに必要なファイルの拡張属性がすでに取り除かれていた場合はこの手順は不要。

ビルドマシンですべてのファイルを作成している場合は問題にならないが、たとえば次のようなファイルが含まれているときは要注意。別のマシン(ビルドマシンではないmac)で作成してネット経由でもらってくる、というのはよくある話。

  • アイコンファイル .icnsファイル
  • Resourcesフォルダ内のファイル 各種設定ファイルをこのフォルダに置く場合
  • Componentsフォルダ内のコンポーネント ビルドマシンでコンパイルしておくと良い
  • 「お読みください」

署名付きビルドが失敗した場合は、次のコマンドでプロジェクトに含まれるファイルの拡張属性を疑ってみる。

  • xattr -p
  • xattr -d

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


会計ジロウ法人 発売開始について

ブログ 会計ジロウ法人 発売開始について

2018年3月に発売開始した会計ジロウですが、青色申告版「会計ジロウ」に加えて、法人版「会計ジロウ法人」を販売開始することができました。関係者の皆様、ご協力ありがとうございました。

青色申告版は消費税を「税込」でしか扱うことができませんでした。このため課税事業者で青色申告している方にはお使いいただけませんでした。法人版は、税込入力方式は青色版と同じですが、消費税を税抜で決算書を作成できる機能が実装されています。課税事業者、非課税事業者のどちらの場合でもお使い頂ける仕様になっています。決算書の形式は青色とは異なりますが青色申告の個人事業主の方にもお使いいただけます。なんといっても最大の特徴は消費税の自動計算&シミュレーションです。

治郎吉商店では、従来から税込入力、税抜決算書で法人税を申告してきました。簡易課税を検討することもできますが適用していません。売上が1千万円以上5千万円以下なのです。当社の場合、会計ソフトには次のような機能が必要と考えました。(Aクラス)

A1)金額を税込で確認できること
A2)税抜のBS、PLを確認できること
A3)消費税計算書

このほかに目標とした機能として次があります。(Bクラス)

B1)複数年のデータを一つのファイルに保持して、過去の仕訳を確認できる
B2)「あとで確認」の機能を設けて、未確定な仕訳があることをわかるようにする
B3)経営分析のために損益推移表を出力できるようにする
B4)BS、PL、損益推移表の項目は編集することができる

今回のリリースには間に合いませんでしたが次のもあります。(Cクラス)

C1)減価償却費の月額を自動仕訳

これらのほかに、会計ソフトとして必須な機能があります。(Zクラス)エクセルのテンプレートでは実装できない機能です。

Z1)借方貸方の合計があっていない伝票は登録できない
Z2)借方貸方の合計があっていない開始残高は登録できない
Z3)借方貸方の合計があっていない仕訳データはインポートできない
Z4)勘定科目は科目コードで指定、選択画面で選択も可能