[解決済み】コマンドラインツールでMac OS X用の見栄えの良いDMGを作成する方法は?
質問
Macアプリケーションのインストーラーを作成する必要があります。ディスクイメージ(DMG)で、サイズ、レイアウト、背景画像は事前に定義しておきたい。
これをプログラム的にスクリプトで行い、既存のビルドシステム(インストーラを作成するだけなので、実際はパックシステムのようなものです)に統合する必要があります。ビルドは別に行われます)。
DMGの作成は"hdiutil"ですでにできているのですが、まだわかっていないのは、アイコンレイアウトの作成方法と背景ビットマップの指定方法です。
どのように解決するのですか?
いろいろ調べた結果、このような答えにたどり着きましたので、私自身の質問の答えとして、ここに参考までに載せておきます。
-
システム環境設定>ユニバーサルアクセスで、"支援機器のアクセスを有効にする"がチェックされていることを確認してください。アップルスクリプトを動作させるために必要です。この変更後、再起動が必要になる場合があります(Mac OS X Server 10.4では、これ以外の方法では動作しません)。
-
R/W DMGを作成します。結果が出るより大きくなければならない。この例では、bash変数 "size"にKb単位のサイズが格納され、bash変数 "source"のフォルダの中身がDMGにコピーされることになる。
hdiutil create -srcfolder "${source}" -volname "${title}" -fs HFS+ \ -fsargs "-c c=64,a=16,e=16" -format UDRW -size ${size}k pack.temp.dmg
-
ディスクイメージをマウントし、デバイス名を保存します(この操作の後、数秒間スリープを使用するとよいでしょう)。
device=$(hdiutil attach -readwrite -noverify -noautoopen "pack.temp.dmg" | \ egrep '^/dev/' | sed 1q | awk '{print $1}')
-
DMG内の".background"というフォルダに背景画像(PNG形式)を格納し、その名前を"backgroundPictureName"という変数に格納します。
-
AppleScriptを使ってビジュアルスタイルを設定します(.appの名前はbashの変数 "applicationName"に入れる必要があり、必要に応じて他のプロパティに変数を使用します)。
echo ' tell application "Finder" tell disk "'${title}'" open set current view of container window to icon view set toolbar visible of container window to false set statusbar visible of container window to false set the bounds of container window to {400, 100, 885, 430} set theViewOptions to the icon view options of container window set arrangement of theViewOptions to not arranged set icon size of theViewOptions to 72 set background picture of theViewOptions to file ".background:'${backgroundPictureName}'" make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"} set position of item "'${applicationName}'" of container window to {100, 100} set position of item "Applications" of container window to {375, 100} update without registering applications delay 5 close end tell end tell ' | osascript
-
パーミッションを適切に設定し、圧縮してリリースすることで、DMGを最終的に完成させる。
chmod -Rf go-w /Volumes/"${title}" sync sync hdiutil detach ${device} hdiutil convert "/pack.temp.dmg" -format UDZO -imagekey zlib-level=9 -o "${finalDMGName}" rm -f /pack.temp.dmg
Snow Leopardでは、上記のアップルスクリプトは、アイコンの位置を正しく設定しません。回避策としては、アイコンを設定した後にclose/openを単純に呼び出すことです。
..
set position of item "'${applicationName}'" of container window to {100, 100}
set position of item "Applications" of container window to {375, 100}
close
open
関連
-
[解決済み] VirtualBox: mount.vboxsf: mount failed with the error: そのようなデバイスはありません[closed]。
-
[解決済み] mongo コマンドが使えない。mac ではコマンドが見つからないと表示される。
-
[解決済み] MAMPはphp.iniをどこに保存しているのですか?
-
[解決済み] Bashでコマンドライン引数を解析するには?
-
[解決済み] OS Xターミナルでカーソルを単語単位で移動する方法
-
[解決済み] "コード" OSX/MacのVisual Studio Codeのコマンドラインでは動作しない
-
[解決済み] コマンドラインツールが動作しない - OS X El Capitan、Sierra、High Sierra、Mojave
-
[解決済み] Windowsのコマンドライン環境を使って、ファイル内のテキストを検索・置換するにはどうすればよいですか?
-
[解決済み] Xcodeコマンドラインツールのインストール方法
-
[解決済み】bash/sedスクリプトを使用してテキストファイルの最初の行を削除するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] OSX Mavrerick で mvn コマンドが見つかりません。
-
[解決済み] MAMPはphp.iniをどこに保存しているのですか?
-
[解決済み] そのような keg はありません: /usr/local/Cellar/git
-
[解決済み] DYLD: レイジーシンボル
-
[解決済み] MacVimと通常のVimの違いは何ですか?
-
[解決済み] なぜ `source ~/.profile` を使い続けないと設定ができないのですか?
-
[解決済み] ターミナルで現在のブランチとフォルダのパスを表示するにはどうすればよいですか?
-
[解決済み] MacのApplication Loaderアプリはどこにありますか?
-
[解決済み] Macにsshpassをインストールする方法は?
-
[解決済み] Gitのパスワードを更新する方法を教えてください。