문제

나를 만들어야 좋은 설치 관리자를 위한 Mac 프로그램.나는 그것을 디스크 이미지(DMG),미리 정의된 크기,레이아웃과 배경 이미지입니다.

나는 할 필요가 이 프로그래밍 방식으로 스크립트에서에 통합될 수 있에서 기존의 빌드 시스템(기 시스템은 정말 이후,그것은 만들 미치지 않습니다.빌드가 완료 별도).

이미 DMG 창조를 사용하여 수행됩"hdiutil",내가 무엇을 발견하지 않았 아직은 어떻게 아이콘 레이아웃과 배경을 지정 bitmap.

도움이 되었습니까?

해결책

후에 많이 연구했고,이런 대답하고 나는 이에 넣고 여기에 대한 답변으로 내 자신의 질문에 대한 참조:

  1. 는지 확인"에 대한 액세스를 사용하도록 설정하 보조 장비"검사 시스템 환경설정에서>>유니버설 액세스입니다.그것은 필요한 애플 스크립트를 작동합니다.해야 할 수 있습 후 재부팅이 변경(그것은 작동하지 않는 그렇지 않으면 Mac OS X 서버 10.4).

  2. 을 만들 R/W DMG.그것은 보다 커야 합니다 결과가 될 것입니다.이 예제에서,bash 변수는"크기"포함 크기에서는 Kb 내용의 폴더에"원"bash 변수를 복사됩니다 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
    
  3. 마운트한 디스크 이미지,그리고 저장하는 장치 이름(사용할 수 있습 잠 몇 초 후에 이 작업):

    device=$(hdiutil attach -readwrite -noverify -noautoopen "pack.temp.dmg" | \
             egrep '^/dev/' | sed 1q | awk '{print $1}')
    
  4. 저장 배경 그림이(PNG format)이라는 폴더에".배경에서"DMG 및 저장소의 이름에"backgroundPictureName"변수입니다.

  5. 애플 스크립트를 사용하여 설정한 시각적인 스타일을(의 이름입니다.용에 있어야 합니다 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
    
  6. Finialize 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 
    

눈에는 레오파드,위 applescript 이 설정하지 않은 아이콘을 올바르게 배치-수 Snow Leopard 버그입니다.중 하나는 해결 방법이 단순히 전화 열기/닫기 설정한 후에는 아이콘,즉:

..
set position of item "'${applicationName}'" of container window to {100, 100}
set position of item "Applications" of container window to {375, 100}
close
open

다른 팁

이 Bash 스크립트라고 만들기-dmg 건축하는 멋진 DMGs 사용자 정의 배경,사용자 정의 아이콘을 두고 볼륨 이름입니다.

내장했 그것은 몇 년 전에는 회사는 실행 시간그것은 살아 다른 사람들의 기여 그 이후로,그리고 보도 잘 작동합니다.

노드-appdmg 처럼 보이는 더 현대적이고 적극적인 노력을 기반으로 Node.js;체크아웃뿐만 아니라.

지 않습니다.으로 장기 Mac 개발자,나는 확신할 수 있는 솔루션입니다 정말로 잘 작동됩니다.나은 솔루션이지만,그들은 그들 모두 너무 좋지 않다.나는 생각한 문제는 사과하지 않는 정말 문서 메타데이터 형식으로 필요한 데이터이다.

여기에 내가 뭘 어떻게 그것은 긴 시간 동안,매우 성공적으로:

  1. 새로 만들 DMG,쓰기(!), 충분히 예상되는 바이너리하고 그 외의 파일과 같은 추가 정보를(sparse 도).

  2. 산 DMG 고 그것을 주는 레이아웃에서 수동으로 측정기 또는 가 어떤 도구에 맞는 일을 위해 당신에는(참조하십시오 FileStorm 링크 아래쪽에 좋은 공구).배경 이미지는 일반적으로 이미지를 우리에 넣어 숨겨진 폴더에("."뭔가)에 DMG.을 넣어의 복사본다(모든 버전에도 오래된 중 하나 할 것이다).사본을 다른 파일을(별칭을 추가 정보 등.) 당신이 원하는 거기에 다시,오래된 버전이 잘 할 것입니다.확인한 아이콘을 오른쪽 크기와 위치(IOW,레이아웃 DMG 는 방법 당신이 원하).

  3. 마운트를 해제 DMG 다시 모든 설정이 저장되어야 한다.

  4. 쓰 create DMG 스크립트는 다음과 같습니다.

    • 그것은 사본 DMG,그래서 원래 하나이지 않 감동을 다시합니다.
    • 그것은 마운 복사본입니다.
    • 그것을 대체하는 모든 파일과 함께 가장 최신의 것(예:최신 후 응용 프로그램을 구축).단순히로 사용할 수 있습니다 mvditto 에 대한 명령 라인입니다.참고할 때,당신은 파일을 바꾸는 아이콘이 머물 것 같은 위치로 유지됩니다,그러나 모든 파일(또는 디렉토리)콘텐츠에 동일하게 유지(적어도 동감,우리는 일반적으로 사용하는 작업이).할 수 있습니다 물론 또한 바꾸는 배경 이미지와는 다른 하나(다만을 보유하고 있는지 확인하십시오과 동일한 크기).
    • 교체 후 파일을 스크립트를 분 DMG 복사본을 다시합니다.
    • 마지막으로 호출 hdiutil 변환기,압축(과 같은 쓸 수 없)DMG.

이 방법을 사용하지 못할 수 있습드 최선,하지만 나를 믿어,그것은 정말 잘 작동하고 있다.를 넣을 수 있습니다 원래 DMG(DMG 템플릿)에서도 버전 관리(예:SVN),그래서 만약 당신이 이제까지 실수로 변경/그것을 파괴할 수 있습으로 돌아가 개정이 그것도 괜찮습니다.를 추가할 수 있습니다 DMG 템플릿을 Xcode 프로젝트와 함께,다른 모든 파일에 속하는에 DMG(추가 정보,URL 을 파일에는 배경 이미지)모든 버전에서 컨트롤한 다음 대상을 만들(예:외부 대상 만들기"라는 DMG")고 있 실행 DMG 스크립트가 위의 추가의 오래된 주요 대상으로 의존 대상입니다.파일에 액세스할 수 있습 Xcode 트리를 사용하${SRCROOT}스크립트에서(항상스트가 귀하의 제품)그리고 당신은에 액세스할 수 있는 제품을 만드를 사용하여${BUILT_PRODUCTS_DIR}(은 항상 디렉토리 엑스 코드를 만들이 구축한 결과).

결과:실제로 엑스 코드를 생성할 수 있습 DMG 의 끝에서 빌드.DMG 는 준비를 놓습니다.뿐만 아니라 당신은 만들 수 있습 relase DMG 아주 쉽게 그런 식으로,당신은 실제로 할 수 있도록 자동화된 프로세스(에 머리는 서버는 경우 등),사용 xcodebuild 에서 명령행(자동 시간대를 선택하여 빌드를 위해 예).

에 관한 초기 레이아웃의 템플릿 FileStorm 좋은 도구에 대한 그것을 하고 있다.그것은 상업적인,하지만 매우 강력하고 사용하기 쉽습니다.일반 버전입니다 less than$20,그래서 그것은 진짜로 저렴합니다.어쩌면 중 하나를 자동화할 수 있습니다 FileStorm 을 만들 DMG(예:을 통해 AppleScript),시도하지 않는,하지만 당신이 발견되면 템플릿 DMG,그것은 정말 쉽게 업데이트에 대한 모든 릴리스입니다.

이 질문은 최신을 제공하여 이 대답이다.

appdmg 간단하게 사용하기 쉬운 오픈 소스 명령행 프로그램을 만드는 dmg-에서 파일을 간단하 json 사양에 있습니다.을 살펴 읽어보기에서 공식 웹 사이트:

https://github.com/LinusU/node-appdmg

간단한 예제:

  1. 설치 appdmg

    npm install -g appdmg
    
  2. Json(spec.json)

    {
      "title": "Test Title",
      "background": "background.png",
      "icon-size": 80,
      "contents": [
        { "x": 192, "y": 344, "type": "file", "path": "TestApp.app" },
        { "x": 448, "y": 344, "type": "link", "path": "/Applications" }
      ]
    }
    
  3. 실행 프로그램

    appdmg spec.json test.dmg
    

(면책 조항입니다.나의 창조주이 appdmg)

당신의 사람들을 위해 관심이 있는 이 항목에서 언급해야한 방법을 만들 DMG:

hdiutil create XXX.dmg -volname "YYY" -fs HFS+ -srcfolder "ZZZ"

XXX == disk image file name (duh!)
YYY == window title displayed when DMG is opened
ZZZ == Path to a folder containing the files that will be copied into the DMG

내 응용 프로그램 DropDMG, 는 쉬운 방법을 만드는 디스크 이미지를 배경으로 사진,아이콘 레이아웃,사용자 정의 볼륨 아이콘을,그리고 소프트웨어 사용권 계약에 동의합니다.그것을 제어할 수 있습에서 빌드 시스템을 통해"dropdmg"명령행 도구인 또는 애플 스크립트.원하는 경우,그림 및 라이센스 RTF 파일을 저장할 수 있습에서 당신의 버전 관리 시스템입니다.

내가 찾은 이 위대한 맥 응용 프로그램를 자동화하는 프로세스 http://www.araelium.com/dmgcanvas/ 당신이 있어야 모를 만드는 경우 dmg 설치 프로그램에 대한 귀하의 맥 응용 프로그램

을 설정하려는 경우에는 사용자 정의 볼륨 아이콘을 사용하여 다음 같은 명령어

/*Add a drive icon*/
cp "/Volumes/customIcon.icns" "/Volumes/dmgName/.VolumeIcon.icns"  


/*SetFile -c icnC will change the creator of the file to icnC*/
SetFile -c icnC /<your path>/.VolumeIcon.icns

지금을 만들 읽기/쓰기 dmg

/*to set custom icon attribute*/
SetFile -a C /Volumes/dmgName

을 만들기 위한 좋은 찾고 DMG,당신은 지금 그냥 사는 잘 쓰는 오픈 소스:

.DS_Store 파일을 저장 윈도우 설정에서 맥.윈도우 설정에는 다음이 포함됩니다 아이콘 레이아웃,창의 배경,창의 크기,등등.니다.DS_Store 파일에서 필요한 만들기 위한 창된 이미지를 보존하는 배치 파일와 windows 배경입니다.

있습니다.DS_Store 파일을 만들어,당신은 단지 그것을 복사를 만들어 설치 관리자(DMG).

나의 필요도를 사용하여 명령 라인 접근 방식을 하 포장 및 dmg 창작"프로그래밍 방식으로 스크립트에서".최고의 대답이 나는 지금까지 발견에서 Adium 프로젝트'릴리스 건물 framework 십시오(R1).가 있는 사용자 정의 스크립트(AdiumApplescriptRunner)할 수 있도록 방지하 OSX WindowsServer GUI 상호 작용입니다."osascript applescript.scpt"접근 방식이 필요한으로 로그인을 작성기 및 실행 dmg 생성 명령행에서 vt100 세션이 있습니다.

OSX 패키지 관리 시스템 그래서 고급에 비해 다른 Unixen 는 이 작업을 수행할 수 있습니다 쉽고 체계적으로 합니다.

R1: http://hg.adium.im/adium-1.4/file/00d944a3ef16/Release

마지막으로 이 작업 내에서 고유의 프로젝트(일어나는 Xcode 에서).이러한 추가 3 스크립트를 구축 단계에서는 자동으로 만들 디스크 이미지 제품에 대한 좋고 깔끔합니다.당신이해야 할 모든 것을 구축하는 프로젝트 및 DMG 에서 기다리고 있을 것입니다 당신의 제품 폴더에 있습니다.

Script1(만 Temp 디스크 이미지):

#!/bin/bash
#Create a R/W DMG

dir="$TEMP_FILES_DIR/disk"
dmg="$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.temp.dmg"

rm -rf "$dir"
mkdir "$dir"
cp -R "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app" "$dir"
ln -s "/Applications" "$dir/Applications"
mkdir "$dir/.background"
cp "$PROJECT_DIR/$PROJECT_NAME/some_image.png" "$dir/.background"
rm -f "$dmg"
hdiutil create "$dmg" -srcfolder "$dir" -volname "$PRODUCT_NAME" -format UDRW

#Mount the disk image, and store the device name
hdiutil attach "$dmg" -noverify -noautoopen -readwrite

2 스크립트(설정 창의 속성은 스크립트):

#!/usr/bin/osascript
#get the dimensions of the main window using a bash script

set {width, height, scale} to words of (do shell script "system_profiler SPDisplaysDataType | awk '/Main Display: Yes/{found=1} /Resolution/{width=$2; height=$4} /Retina/{scale=($2 == \"Yes\" ? 2 : 1)} /^ {8}[^ ]+/{if(found) {exit}; scale=1} END{printf \"%d %d %d\\n\", width, height, scale}'")
set x to ((width / 2) / scale)
set y to ((height / 2) / scale)

#get the product name using a bash script
set {product_name} to words of (do shell script "printf \"%s\", $PRODUCT_NAME")
set background to alias ("Volumes:"&product_name&":.background:some_image.png")

tell application "Finder"
    tell disk product_name
        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 {x, y, (x + 479), (y + 383)}
        set theViewOptions to the icon view options of container window
        set arrangement of theViewOptions to not arranged
        set icon size of theViewOptions to 128
        set background picture of theViewOptions to background
        set position of item (product_name & ".app") of container window to {100, 225}
        set position of item "Applications" of container window to {375, 225}
        update without registering applications
        close
    end tell
end tell

위 측정을 위한 창업에 대한 나의 프로젝트 특히 때문에 크기의 배경 그림과 아이콘 해상도;을 수정해야 할 수도 있습니다 이러한 값을 대신 프로젝트입니다.

스크립트 3 조(최종 디스크 이미지 스크립트):

#!/bin/bash
dir="$TEMP_FILES_DIR/disk"
cp "$PROJECT_DIR/$PROJECT_NAME/some_other_image.png" "$dir/"

#unmount the temp image file, then convert it to final image file
sync
sync
hdiutil detach /Volumes/$PRODUCT_NAME
rm -f "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.dmg"
hdiutil convert "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.temp.dmg" -format UDZO -imagekey zlib-level=9 -o "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.dmg"
rm -f "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.temp.dmg"

#Change the icon of the image file
sips -i "$dir/some_other_image.png"
DeRez -only icns "$dir/some_other_image.png" > "$dir/tmpicns.rsrc"
Rez -append "$dir/tmpicns.rsrc" -o "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.dmg"
SetFile -a C "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.dmg"

rm -rf "$dir"

확인 이미지 파일을 사용하고 있는$PROJECT_DIR/$PROJECT_NAME/디렉토리!

이 대답은 너무 복잡하고 시간이 변경되었습니다.다음과 같은 작동에 10.9 그냥 좋은,권한 있는 정확하고 그것은 좋은 보인다.

을 만들 읽기 전용 DMG 에서 디렉토리

#!/bin/sh
# create_dmg Frobulator Frobulator.dmg path/to/frobulator/dir [ 'Your Code Sign Identity' ]
set -e

VOLNAME="$1"
DMG="$2"
SRC_DIR="$3"
CODESIGN_IDENTITY="$4"

hdiutil create -srcfolder "$SRC_DIR" \
  -volname "$VOLNAME" \
  -fs HFS+ -fsargs "-c c=64,a=16,e=16" \
  -format UDZO -imagekey zlib-level=9 "$DMG"

if [ -n "$CODESIGN_IDENTITY" ]; then
  codesign -s "$CODESIGN_IDENTITY" -v "$DMG"
fi

을 만들 읽기 전용 DMG 아이콘으로(.icns 형)

#!/bin/sh
# create_dmg_with_icon Frobulator Frobulator.dmg path/to/frobulator/dir path/to/someicon.icns [ 'Your Code Sign Identity' ]
set -e
VOLNAME="$1"
DMG="$2"
SRC_DIR="$3"
ICON_FILE="$4"
CODESIGN_IDENTITY="$5"

TMP_DMG="$(mktemp -u -t XXXXXXX)"
trap 'RESULT=$?; rm -f "$TMP_DMG"; exit $RESULT' INT QUIT TERM EXIT
hdiutil create -srcfolder "$SRC_DIR" -volname "$VOLNAME" -fs HFS+ \
               -fsargs "-c c=64,a=16,e=16" -format UDRW "$TMP_DMG"
TMP_DMG="${TMP_DMG}.dmg" # because OSX appends .dmg
DEVICE="$(hdiutil attach -readwrite -noautoopen "$TMP_DMG" | awk 'NR==1{print$1}')"
VOLUME="$(mount | grep "$DEVICE" | sed 's/^[^ ]* on //;s/ ([^)]*)$//')"
# start of DMG changes
cp "$ICON_FILE" "$VOLUME/.VolumeIcon.icns"
SetFile -c icnC "$VOLUME/.VolumeIcon.icns"
SetFile -a C "$VOLUME"
# end of DMG changes
hdiutil detach "$DEVICE"
hdiutil convert "$TMP_DMG" -format UDZO -imagekey zlib-level=9 -o "$DMG"
if [ -n "$CODESIGN_IDENTITY" ]; then
  codesign -s "$CODESIGN_IDENTITY" -v "$DMG"
fi

는 경우 다른 아무것도 필요가 일어날,이러한 가장 쉬운 일은 임시 복사본을 만들의 SRC_DIR 와 변경 사항을 적용합니다는 것을 만들기 전에 DMG.

나는 그냥 서면 새로운(절한)command line utility 니다.그것은에 의존하지 않는 측정기/AppleScript,또는의(사용되지 않습니다)Alias 관리 Api,그리고 쉽게 구성하고 사용할 수 있습니다.

어쨌든,누구나 관심이 있습니다 에서 찾을 PyPi;설명서 에 사용할 수 있는 문서를 읽.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top