オープンソースのSSZipArchiveを呼び出して、パスワード付きZipアーカイブを作成するAppleScriptです。
AppleScriptそのものにZipアーカイブの操作機能はないので、この手の操作は他のプログラムを操作することになります。
–> Download ZipArchive.framework (To ~/Library/Frameworks)
(1)Unix shellのzipコマンド
do shell scriptコマンド経由でUnix shellのzipコマンドを呼び出す方法です。データをファイルで扱っている場合にはよいのですが、そうでない場合には困ります(変数に入れたデータを圧縮したいとか)。以前に、なろう小説APIを呼び出したときに、GZIP.frameworkを用いて変数内のデータをZip展開しましたが、こういう用途には使えません。
(2)アーカイブユーティリティを呼び出す
/System/Library/CoreServices/Applications/Archive Utility.appを呼び出す方法です。Mac OS X 10.5までは「BOMArchiveHelper」という名前でした。その他、AppleScriptに対応しているZipアーカイバがあればそれを使ってみてもよいでしょう。これも、(1)同様にファイル単位で操作するものが普通なので、使える用途と使えない用途があります。
(3)各種Cocoa Frameworkを呼び出す
Objective-CのZipアーカイブ操作プログラムを見つけ、Frameworkになっていなくても、無理やりXcode上でCocoa Frameworkを作成し、必要なファイルをそこに突っ込んでFramework化して使っています。
今回使うのはSSZipArchiveです。
いろいろなZip操作のObjective-Cのプログラムをダウンロードしては分析してみると、各プログラムで作者の好みが色濃く反映されており、どれか1つで済むとは思えない状況です。
また、必要なメソッドの呼び出しにBlocks構文による記述が必要な場合にはAppleScriptから呼べません(さらにそのメソッドを呼び出すためのメソッドをObjective-C上で定義するとか、回避方法はいろいろありそうです)。
結局、いろいろGithub上で探してはビルドして試しています。
AppleScript名:ZipArchive Frameworkを使ってパスワード付きZipアーカイブを作成(ファイル指定).scptd |
— Created 2018-09-28 by Takaaki Naganoya — 2018 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "ZipArchive" –https://github.com/ZipArchive/ZipArchive set aPassWord to "yourpassword" set targFile to POSIX path of (choose file with prompt "Select a file to Zip") set archiveTarg to targFile & ".zip" set zipRes to current application’s SSZipArchive’s createZipFileAtPath:(archiveTarg) withFilesAtPaths:{targFile} withPassword:(aPassWord) return zipRes as boolean |
Manabu Yajima says:
初めまして、こんにちは。
こちらのスクリプトを活用させていただこうかと思ったのですが、
macOS Mojave 10.14上で実行しようとすると、以下のエラーが出て実行できません。
何か原因は考えられますでしょうか?
error “バンドル“ZipArchive”を読み込めませんでした。” number -4960 from framework “ZipArchive”
Takaaki Naganoya says:
はじめまして。記事からダウンロードできるようにしてある「ZipArchive.framework」は、~/Library/Frameworksフォルダにインストールしてあるでしょうか?
Zipファイルのまま入れてあるとか、デフォルトで存在していない「Frameworks」フォルダを手動で作成するときにスペルを間違えたとかいうことはないでしょうか?
10.14は(10.13の出来がひどすぎて)まだ入れる気になれなくて、、、(^ー^;;
Takaaki Naganoya says:
あー、Frameworkが見つからない場合のエラーは「framework “ZipArchive”を取り出すことはできません。」なので、この場合には該当しないんですね。
もしも、YajimaさんがXcodeの最新版をお手元のMacにインストールしているようであれば、10.14環境上でhttps://github.com/ZipArchive/ZipArchiveをビルドして試してみてはいかがでしょうか? ZipArchiveは最初からFrameworkをビルドするようにできているので、Githubからプロジェクトをダウンロードしてビルドする程度の操作でFrameworkのバイナリを取得できます。
現時点ではそのぐらいでしょうか?
Manabu Yajima says:
ご返信ありがとうございます。
今のところ大きな不具合はないですが、10.14にするのは控えた方がいいかもしれませんね..
ところで本題ですが、スクリプトをアプリケーション形式で保存したら動作しました。
詳細は不明で、少し不便ですがこの方法でやるしかないですかね..
ビルドも試してみましたが、読み込みせず..
Takaaki Naganoya says:
ためしに、ScriptDebugger 7(のお試し版)でためしてみていただけないでしょうか?
https://latenightsw.com
OS標準のスクリプトエディタでは読まないFrameworkでも、ScriptDebuggerだと問題なく読んだというケースがごく少数確認されています(macOS 10.12上で)。
Manabu Yajima says:
こんにちは。
使用頻度は低いですが、実はScript Debugger 7持ってます。
Script Debugger 7上では動作しているようですよ。
Takaaki Naganoya says:
https://latenightsw.com/mojave-brings-in-big-security-changes/
Shane Stanleyによれば、これはスクリプトエディタの「仕様」のようです。自分でもMojaveの環境を用意して試してみましたが、同様でした。
フレームワークをフォルダに入れて呼ぶのではなく、スクリプトのバンドルの中に入れろということのようです。Script Bundleの中に入れるとか、AppleScript Librariesの中に入れるとか。