そこに行かないでください。長年の Mac 開発者として、本当にうまく機能するソリューションはありません。私は非常に多くの解決策を試しましたが、どれもあまり良くありません。問題は、Apple が必要なデータのメタデータ形式を実際に文書化していないことだと思います。
これが私が長い間やっている方法で、非常に成功しています:
予想されるバイナリ ファイルと readme などの追加ファイルを保持するのに十分な大きさの、書き込み可能な (!) 新しい DMG を作成します (スパースが機能する場合があります)。
DMG をマウントし、Finder で手動で、またはそれを行うのに適したツールを使用してレイアウトを指定します。背景画像は通常、DMG の隠しフォルダー (".something") に入れられた画像です。アプリのコピーをそこに置きます (どのバージョンでも、古いものでもかまいません)。そこに必要な他のファイル (エイリアス、readme など) をコピーします。古いバージョンでも問題ありません。アイコンのサイズと位置が適切であることを確認します (IOW、DMG を希望どおりにレイアウトします)。
DMG を再度アンマウントします。これで、すべての設定が保存されます。
次のように機能する create DMG スクリプトを記述します。
- DMG をコピーするので、元の DMG には二度と触れません。
- コピーをマウントします。
- すべてのファイルを最新のもの (ビルド後の最新のアプリなど) に置き換えます。コマンドラインでmvまたはdittoを使用するだけです。そのようなファイルを置き換えると、アイコンは同じままで、位置も同じままで、ファイル(またはディレクトリ)の内容以外はすべて同じままです(少なくとも、そのタスクに通常使用する同上で) . もちろん、背景画像を別のものに置き換えることもできます (サイズが同じであることを確認してください)。
- ファイルを置き換えた後、スクリプトで DMG コピーを再度アンマウントします。
- 最後に、hdiutil を呼び出して、書き込み可能なものを圧縮された (書き込み不可能な) DMG に変換します。
この方法は最適とは言えないかもしれませんが、実際にはうまく機能します。元の DMG (DMG テンプレート) をバージョン管理 (SVN など) の下に置くこともできるので、誤って変更/破棄した場合でも、問題がなかったリビジョンに戻ることができます。DMG テンプレートを Xcode プロジェクトに追加し、DMG に属する他のすべてのファイル (readme、URL ファイル、背景画像) をすべてバージョン管理下に置いてから、ターゲット (たとえば、「Create DMG」という名前の外部ターゲット) を作成できます。上記の DMG スクリプトを実行し、古いメイン ターゲットを依存ターゲットとして追加します。スクリプトで ${SRCROOT} を使用して Xcode ツリーのファイルにアクセスでき (常に製品のソース ルート)、${BUILT_PRODUCTS_DIR} を使用してビルド製品にアクセスできます (常に Xcode がビルド結果を作成するディレクトリです)。 .
結果: 実際、Xcode はビルドの最後に DMG を生成できます。リリースの準備ができている DMG。この方法で非常に簡単にリリース DMG を作成できるだけでなく、コマンド ラインから xcodebuild を使用して (たとえば、自動化されたナイトリー ビルド)、自動化されたプロセスで (必要に応じてヘッドレス サーバー上で) 実際に作成できます。