月別アーカイブ: 2019年12月

VectorScriptのインクルード その1

知ってましたか?インクルード。VectorScriptの実行環境には、複数のソースファイルに分割して記述されたコードをまとめて実行する機能がある。あ、言い換える、ソースコードを複数のソースファイルに分けて書くことができる。

VectorScriptのスクリプトエディタには貼り付けることのできるコード量の上限があって。は、ひとつのプログラムがソースで32kbytesまで、字数にして32,000文字、全角なら16,000文字、A4に1行に50文字くらいだとして、1ページに60行入るとして、1ページに3,000文字、10ページちょっと。ソースだからステップ数(行数)でいうと600ステップ。えっ、そんなに少ないの?これだとすぐに限界がきちゃう。

VectorScriptでそんなに長いプログラムを書くことがあるのか?という疑問もおありでしょうが、いろいろなプログラムを作っているとすぐにぶつかりますね。特にダイアログ関係はアイテム数が多いとぐんぐんコードが増えていく。図面に色々な図形を自動描画させたりすれば、これもまたコードが増える。プログラマの欲望としてプログラムには1度に大量のことをやらせたいのだ。上限なんてとんでもねえ。

もう一つプログラムが長くなるのがライブラリ化。可読性を高めるために、たとえば文字列切り出しなどの小技なプログラムをfunction/procedureに書いておく。一度役に立ったものは、別のプログラムでも使えるかもしれない。どんどんたまっていく。使うところだけ切り離すのは手間。

そこでインクルード(INCLUDE)の登場。言語によってはimportって記述する。ソースコードを分割して記述できる機能で多くの言語に備わっている。VectorScriptでも実装されている。VectorScriptのスクリプトエディタに貼り付けたメインとなるソースの他に、どこかのフォルダにサブとなるソースファイル(テキスト形式)を置いておいて、コンパイル・実行時に読み込んでくれる。

ということは、メインとなるソースは図面ファイルの中にあって、プログラムの一部が外部のソースファイルにある。図面ファイルだけではプログラムが動かない。

外部にソースファイルを置く、ということはファイルのパス名(通り道の意味のpath)、ファイルパスとか呼ばれている。macOSでは「Macintosh HD:アプリケーション:…..」のようなもの、Windowsでは「C:\….」からはじまっている記述方法、が絶対パス、これに対して「../download」のような一つ上の「download」フォルダ、の意味を示す記述方法、相対パスがある。絶対パスで参照するか、相対パスで参照するか、いずれにしてもこのパス名をソースの中に記述することになる。自分のマシンだけでプログラムを動かすのなら絶対パスでもいいけど、別のマシンでもソースを修正することなく動いて欲しい。そう、マシンが変わったらパス名が違うし、フォルダが変わっても絶対パスは変わる。

VectorScriptのインクルード その2」に続く

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

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

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

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

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

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

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

xattr -rc 「パス名」

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

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

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

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

これが出荷イメージ

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

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

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

次はnotarize

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

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

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

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