こんにちは、矢野です。
Macの「ditto」コマンドで、ファイルを圧縮できるか試してみました。
※ dittoコマンドでファイルを圧縮すると、Macのファイル情報であるリソースフォークを含んだ形で圧縮できるんです。
以下を参考に
AIR2.0 Bata 2 でNativeProcessつかってみる。Flash CS4つかって。
ハマったこと リリースビルドでエラー続出
application.xmlの追記と、ネイティブインストーラーが必須なことを知らず、
普通にリリースビルドしても全く動かずで、かなり格闘しました。
ネイティブインストーラーはWinならexe Macならdmgでインストーラーを作成しないと駄目なんですねぇ。
とりあえず、adtコマンドをターミナルから実行できるよう設定します。
1.AIR2.0のsdk内のbinにコマンドが格納されているので、シェルにパスを通します。
私は、zshなんで、.zsrenvに
export PATH=~/Applications/Adobe\ Flash\ Builder\ 4/sdks/4.0.0/bin
2.ターミナル再起動すると、「adt」コマンドが利用可能に!
3.圧縮するシェルスクリプトを用意
src/archive.sh
1 2 |
#!/bin/sh ditto -c -k "$@" |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
< ?xml version="1.0" encoding="utf-8"?> <mx :WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" horizontalAlign="left" creationComplete="init()"> </mx><mx :Script> < ![CDATA[ import flash.desktop.*; import mx.controls.Alert; private var process:NativeProcess; private function init():void{} public function dittoCommnd():void{ if (NativeProcess.isSupported){ // コマンドライン情報設定 var info:NativeProcessStartupInfo = new NativeProcessStartupInfo(); // 実行するプログラムを指定 相対パスの場合、flaのあるフォルダからのパス var shFile:File = File.applicationDirectory.resolvePath("archive.sh"); info.executable = shFile; // 実行するプログラムに渡す引数 var args:Vector.<String> = new Vector.<string>(); //第1引数 args.push("/Users/test/Pictures/hoge"); //圧縮するファイル達 //第2引数 args.push("/Users/test/Desktop/hoge.zip"); // 圧縮後のファイル名 info.arguments = args; process = new NativeProcess(); process.addEventListener(NativeProcessExitEvent.EXIT, onComplateHandler); process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData); process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onErrorData); process.start(info); }else{ Alert.show("NativeProcess not supported."); } } public function onComplateHandler(event:NativeProcessExitEvent):void { outPutTextArea.text = "Process exited with " + event.exitCode; Alert.show("Archive complete"); } public function onOutputData(event:ProgressEvent):void{ trace("Got: ", process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable)); outPutTextArea.text = process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable) + outPutTextArea.text; } private function onErrorData(event:Event):void{ Alert.show("ERROR"); var bytes = event.currentTarget.standardOutput; outPutTextArea.text = bytes.readUTFBytes(bytes.bytesAvailable).toString(); } ]]> </string></mx> <mx :HBox width="100%"> <mx :Button label="圧縮" click="dittoCommnd()"></mx> </mx> <mx :TextInput width="100%" height="100%" editable="false" id="outPutTextArea"></mx> |
5.NativeProcessTest-app.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
< ?xml version="1.0" encoding="utf-8" standalone="no"?> <application xmlns="http://ns.adobe.com/air/application/2.0beta2"> // 以下のようにextendedDesktop desktopってしないとリリースビルドできません <supportedprofiles>extendedDesktop desktop</supportedprofiles> <id>NativeProcessTest</id> <filename>NativeProcessTest</filename> <name>NativeProcessTest</name> <version>v1</version> <initialwindow> <!-- The main SWF or HTML file of the application. Required. --> <!-- Note: In Flash Builder, the SWF reference is set automatically. --> <content>[この値は Flash Builder の出力ファイル app.xml に上書きされます。]</content> <!-- The title of the main window. Optional. --> <!-- <title> --> <!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. --> <!-- <systemChrome> --> <!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. --> <!-- <transparent> --> <!-- Whether the window is initially visible. Optional. Default false. --> <!-- <visible> --> <!-- Whether the user can minimize the window. Optional. Default true. --> <!-- <minimizable> --> <!-- Whether the user can maximize the window. Optional. Default true. --> <!-- <maximizable> --> <!-- Whether the user can resize the window. Optional. Default true. --> <!-- <resizable> --> <!-- The window's initial width in pixels. Optional. --> <!-- <width> --> <!-- The window's initial height in pixels. Optional. --> <!-- <height> --> <!-- The window's initial x position. Optional. --> <!-- <x> --> <!-- The window's initial y position. Optional. --> <!-- <y> --> <!-- The window's minimum size, specified as a width/height pair in pixels, such as "400 200". Optional. --> <!-- <minSize> --> <!-- The window's initial maximum size, specified as a width/height pair in pixels, such as "1600 1200". Optional. --> <!-- <maxSize> --> </initialwindow> </application> |
6.リリースビルド
普通にキーストアを仕様してリリースビルドするだけでOKです。
7.インストーラーパッケージ化(dmg作成)
ターミナルより、リリースビルドファイルの場所まで移動し、以下、adtコマンド実行
1 |
adt -package -target native NativeProcessTest.dmg NativeProcessTest.air |
NativeProcess.mxml 22・23行目あたり
1 2 3 4 |
//第1引数 args.push("/Users/test/Pictures/hoge"); //圧縮するファイル達 //第2引数 args.push("/Users/test/Desktop/hoge.zip"); // 圧縮後のファイル名 |