java - 用于 DMG 背景的自定义插入式图标,用于 MacOSX 上的应用程序打包

标签 java macos javafx-2 packaging app-bundle

我在为 MacOSX 构建的独立包中添加 DMG 背景的自定义图标时遇到问题。我在项目的根目录中添加了一个包。正在从中加载自定义图标,但没有加载 DMG 背景图标。我正在使用 Java fx 2.2.3 和 jdk1.7.0_09。这是为相同生成的详细输出。

Detected JavaFX Ant API version 1.2 Launching <fx:jar> task from
/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/lib/ant-javafx.jar
Launching <fx:deploy> task from
/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/lib/ant-javafx.jar
Copying 102 files to
/Users/apple/NetBeansProjects/JavaFXApplication2/dist Using base JDK
at: /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk Using default
package resource [Bundle config file] (add package/macosx/Info.plist
to the class path to customize) Using custom package resource [icon]
(loaded from file
/Users/apple/NetBeansProjects/JavaFXApplication2/package/macosx/javaFXApplication2.icns)
Creating app bundle:
/Users/apple/NetBeansProjects/JavaFXApplication2/dist/bundles/JavaFXApplication2.app
Config files are saved to
/var/folders/vd/nyxf14z53tx56g2_lbqcnfrr0000gn/T/build1722966263281326253.fxbundler/macosx.
Use them to customize package. Building DMG package for
JavaFXApplication2 Using default package resource [Bundle config
file] (add package/macosx/Info.plist to the class path to customize)
Using custom package resource [icon] (loaded from file
/Users/apple/NetBeansProjects/JavaFXApplication2/package/macosx/javaFXApplication2.icns)
Config files are saved to
/var/folders/vd/nyxf14z53tx56g2_lbqcnfrr0000gn/T/build1722966263281326253.fxbundler/macosx.
Use them to customize package. Using default package resource [dmg
background] (add package/macosx/JavaFXApplication2-background.png to
the class path to customize) Using custom package resource [volume
icon] (loaded from file
/Users/apple/NetBeansProjects/JavaFXApplication2/package/macosx/javaFXApplication2.icns)
Using default package resource [script to run after application
image is populated] (add
package/macosx/JavaFXApplication2-post-image.sh to the class path to
customize) Using default package resource [DMG setup script] (add
package/macosx/JavaFXApplication2-dmg-setup.scpt to the class path
to customize) Result DMG installer for JavaFXApplication2:
/Users/apple/NetBeansProjects/JavaFXApplication2/dist/bundles/JavaFXApplication2.dmg
Config files are saved to
/var/folders/vd/nyxf14z53tx56g2_lbqcnfrr0000gn/T/build1722966263281326253.fxbundler/macosx.
Use them to customize package.

这是列出我所有图标文件的目录:-

Apples-MacBook-Pro-2:~ apple$ ls -l /Users/apple/NetBeansProjects/JavaFXApplication2/package/macosx/
total 136
-rw-r--r--@ 1 apple staff 1251 Nov 1 19:02 Info.plist
-rw-r--r-- 1 apple staff 18017 Nov 1 18:22 JavaFXApplication2-background.png
-rw-r--r--@ 1 apple staff 902 Nov 2 13:55 JavaFXApplication2-dmg-setup.scpt
-rw-r--r-- 1 apple staff 38115 Jan 19 2006 JavaFXApplication2.icns

如您所见,图标是从包中加载的,但 DMG 背景文件不是,即使我也在同一目录中添加了该文件。

最佳答案

OS X 中文件夹的背景由 Finder 在 .DS_Store 文件中设置。如果您注意不要更改背景文件的文件夹路径和名称,则可以使用 Finder 设置背景图像,然后复制 .DS_Store 文件并在构建过程中将其复制过来。如果你想要更好的东西,我们使用这个 Perl 脚本来设置文件夹的背景(它依赖于其他一些 Perl 库,你应该可以找到它们)。

#!/usr/bin/perl
use Mac::Finder::DSStore::BuddyAllocator;
use Mac::Finder::DSStore;
use IO::File;
use Data::Dumper;
use Config;
use Mac::Files;
use Mac::Memory;
use Mac::Finder::DSStore qw( writeDSDBEntries makeEntries );
use Sys::Filesystem::ID;
use File::Basename;

die "Usage: $0 <Folder path> <bg path relative to folder>\n"
    unless @ARGV == 2;

$folderPath=$ARGV[0];
while ($folderPath =~ /\/$/)
{
    chop($folderPath);
}

die "$folderPath is not a directory" unless -d $folderPath;
$bgPath=$folderPath."/".$ARGV[1];
die "$bgPath is not a file" unless -f $bgPath;

# When we're setting the background for the root, the info lives
# in the .DS_Store file in the directory, otherwise it lives in
# the parent directory
if (Sys::Filesystem::ID::_arg_to_mount_point($folderPath) eq $folderPath)
{
    $dsStoreFile=$folderPath."/.DS_Store";
    $ourName=".";
}
else
{
    $dsStoreFile=$folderPath."/../.DS_Store";
    ($ourName, $path, $suffix) = fileparse($folderPath);
}

#print "Setting bg for $folderPath to $bgPath, .DS_Store file = $dsStoreFile ourName=$ourName\n";
#We use byFilename to keep track of the records for everybody
# we will pull out the records for . and remove any BKGD records
@otherRecs=();
@ourRecs=();
if (-f $dsStoreFile)
{
    $store = Mac::Finder::DSStore::BuddyAllocator->open(new IO::File $dsStoreFile, '<');
    @records=&Mac::Finder::DSStore::getDSDBEntries($store);
    foreach my $curRec (@records)
    {
        if ($curRec->filename ne $ourName)
        {
            push(@otherRecs, $curRec);
        }
        else
        {
            push(@oldRecs, $curRec);
        }
    }
    if ( @oldRecs != 0)
    {
        foreach $curRec(@oldRecs)
        {
            if ($curRec->strucId ne "BKGD" && $curRec->strucId ne "pict" && $curRec->strucId ne "bwsp" && $curRec->strucId ne "icvp")
            {
                push(@ourRecs, $curRec);
            }
        }
    }

}
undef $store;
if ($ourRec == 0)
{
    push(@ourRecs, &makeEntries($ourName, ICVO => 1,
            icvo => pack('A4 n A4 A4 n*', "icv4", 48, "none", "botm", 0, 0, 0, 0, 0, 1, 0, 100, 1)));
}
@bgRecs=&makeEntries($ourName, BKGD_alias => NewAliasMinimal($bgPath));
@ourRecs=(@ourRecs,@bgRecs);
&writeDSDBEntries($dsStoreFile, @ourRecs, @otherRecs);

关于java - 用于 DMG 背景的自定义插入式图标,用于 MacOSX 上的应用程序打包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13208070/

相关文章:

java - 添加联系人到 mac 联系人?

java - 如何以编程方式在 JavaFX 中设置选项卡标签的颜色或纹理?

java - 列表初始化错误

macos - 这是适用于 OS X Snow Leopard 的 Vim 版本吗?

java - BufferedReader readLine 和 OutputStreamWriter .write

ios - 如何将 UnsafePointer 映射到另一种类型?

java - 将 SWT/JFace 桌面 GUI 转换为 JavaFX 以使其成为 Web 应用程序?

java - 使用 javafx SimpleMapProperty 时出现 UnsupportedOperationException

java - 将按钮中的数字插入到 EditText 中选定的位置

java - Android Studio (0.8.2) + Android Annotations (3.0.1) cannot symbol class MyClass