Packaging: Ship macOS dSYMs in their own .dmg.

Create a Wireshark.dSYM bundle for our debugging symbols. Create a
separate .dmg for the dSYM bundle, similar to what we do for Windows.
`dwarfdump --uuid run/Wireshark.dSYM` returns what app

This reduces the size of the application bundle and .dmg quite a bit
(sizes measured with `du -sm`):

51	Wireshark 3.7.0 Intel 64.dmg
81	Wireshark dSYM 3.7.0 Intel 64.dmg
182	Wireshark.app
262	Wireshark.dSYM
This commit is contained in:
Gerald Combs 2022-02-26 15:14:36 -08:00
parent df0fc8b517
commit 1677e0a8f9
8 changed files with 273 additions and 45 deletions

View File

@ -1702,9 +1702,10 @@ set(CFG_OUT_FILES
image/wireshark.exe.manifest
image/wireshark.rc
packaging/macosx/Info.plist
packaging/macosx/dmgbuild-settings.py
packaging/macosx/osx-app.sh
packaging/macosx/osx-dmg.sh
packaging/macosx/wireshark-app.dmgbuild
packaging/macosx/wireshark-dsym.dmgbuild
packaging/source/git-export-release.sh
wireshark.pc
)
@ -3168,8 +3169,22 @@ if(ENABLE_APPLICATION_BUNDLE)
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/packaging/macosx/Read_me_first.adoc
)
add_custom_target(read_me_first_html DEPENDS ${_read_me_first} )
add_dependencies(dmg_package_prep read_me_first_html)
set(_dsym_installation "packaging/macosx/Debugging symbols installation.html")
ADD_CUSTOM_COMMAND(
OUTPUT
${_dsym_installation}
COMMAND ${ASCIIDOCTOR_EXECUTABLE}
--backend html
--out-file ${_dsym_installation}
--attribute include-dir=${CMAKE_SOURCE_DIR}/docbook
${CMAKE_CURRENT_SOURCE_DIR}/packaging/macosx/Debugging_symbols_installation.adoc
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/packaging/macosx/Debugging_symbols_installation.adoc
)
add_custom_target(dmg_package_readmes DEPENDS ${_read_me_first} ${_dsym_installation} )
add_dependencies(dmg_package_prep dmg_package_readmes)
ADD_CUSTOM_TARGET( dmg_package
COMMAND bash -x ${CMAKE_BINARY_DIR}/packaging/macosx/osx-dmg.sh

View File

@ -97,6 +97,8 @@ They previously shipped with Npcap 1.55.
* Support to display JSON mapping for Protobuf message.
* macOS debugging symbols are now shipped in separate packages.
=== Removed Features and Support
* CMake: The options starting with DISABLE_something were renamed ENABLE_something for consistency.

View File

@ -0,0 +1,17 @@
// Required attributes:
// include-dir
include::{include-dir}/attributes.adoc[]
:stylesheet: {include-dir}/ws.css
== Debugging Symbols for Wireshark
This archive contains the debugging symbols for Wireshark {wireshark-version}.
The debugging symbols are only necessary if Wireshark is crashing and you need to report an issue to the Wireshark development team.
WARNING: This won't work properly with any version other than Wireshark {wireshark-version}.
To install the symbols, drag _Wireshark.dSYM_ to the same location as _Wireshark_.
This is usually your _Applications_ folder.
To uninstall, drag _Wireshark.dSYM_ to the trash.

View File

@ -5,7 +5,7 @@
include::{include-dir}/attributes.adoc[]
:stylesheet: {include-dir}/ws.css
= Before You Begin
== Before You Begin
This release of Wireshark requires macOS {min-macos-version} or later.
If you are running an earlier version of macOS you can install using another packaging system such as Homebrew or MacPorts.

View File

@ -434,42 +434,69 @@ else
fi
dsymify_file () {
echo " $1"
dsymutil --minimize "$1"
}
bundle_dsym=$bundle.dSYM
echo "Dsymifying executables:"
if [ -z "$bundle_binary_list" ] ; then
echo "No executables specified for dsymifying."
exit 1
fi
for binary in $bundle_binary_list ; do
if [ -e "$binary" ];then
dsymify_file "$binary"
fi
done
echo "Dsymifying frameworks:"
frameworks=()
for framework in "$pkglib"/*.framework/Versions/*/* ; do
if [ -f "$framework" ];then
dsymify_file "$framework"
frameworks+=("$framework")
fi
done
echo "Dsymifying libraries:"
for library in "$pkglib"/*.dylib ; do
#
# Squelch warnings, in case the .o files from building
# support libraries aren't around any more.
#
dsymify_file "$library" | grep -E -v 'unable to open object file'
done
echo "Dsymifying binaries:"
# shellcheck disable=SC2086
dsymutil --minimize --out "$bundle_dsym" \
$bundle_binary_list \
"${frameworks[@]}" \
"$pkglib"/*.dylib
echo "Dsymifying plugins:"
for plugin in "$pkgplugin"/*/*.so ; do
dsymify_file "$plugin"
done
# echo "Stripping binaries:"
# # shellcheck disable=SC2086
# strip -S \
# $bundle_binary_list \
# "${frameworks[@]}" \
# "$pkglib"/*.dylib \
# "$pkgplugin"/*/*.so
# XXX What's the proper directory layout here?
# dsymify_file () {
# # out_dsym="${1/#$bundle/$bundle_dsym}.dSYM"
# echo " $1"
# dsymutil --minimize --out "$bundle_dsym" "$1"
# strip "$1"
# }
# echo "Dsymifying and stripping executables:"
# if [ -z "$bundle_binary_list" ] ; then
# echo "No executables specified for dsymifying."
# exit 1
# fi
# for binary in $bundle_binary_list ; do
# if [ -e "$binary" ];then
# dsymify_file "$binary"
# fi
# done
# echo "Dsymifying and stripping frameworks:"
# for framework in "$pkglib"/*.framework/Versions/*/* ; do
# if [ -f "$framework" ];then
# dsymify_file "$framework"
# fi
# done
# echo "Dsymifying and stripping libraries:"
# for library in "$pkglib"/*.dylib ; do
# #
# # Squelch warnings, in case the .o files from building
# # support libraries aren't around any more.
# #
# dsymify_file "$library" | grep -E -v 'unable to open object file'
# done
# echo "Dsymifying and stripping plugins:"
# for plugin in "$pkgplugin"/*/*.so ; do
# dsymify_file "$plugin"
# done
codesign_file () {
# https://developer.apple.com/library/archive/documentation/Security/Conceptual/CodeSigningGuide/Procedures/Procedures.html

View File

@ -7,7 +7,8 @@ set -e
# Defaults
dmgbuild="@DMGBUILD_EXECUTABLE@"
version="@VERSION@"
settings_file="@CMAKE_BINARY_DIR@/packaging/macosx/dmgbuild-settings.py"
app_settings_file="@CMAKE_BINARY_DIR@/packaging/macosx/wireshark-app.dmgbuild"
dsym_settings_file="@CMAKE_BINARY_DIR@/packaging/macosx/wireshark-dsym.dmgbuild"
architecture=""
# Help message
@ -24,8 +25,8 @@ OPTIONS
-h,--help
Display this help message.
Icons are positioned and the background image is set in
dmgbuild-settings.py.in.
Icons are positioned and the background image is set in wireshark-app.dmgbuild.in
and wireshark-dsym.dmgbuild.in.
"
}
@ -58,27 +59,38 @@ do
shift 1
done
vol_name="Wireshark ${version}"
img_name="$vol_name $architecture.dmg"
app_vol_name="Wireshark ${version}"
app_img_name="$app_vol_name $architecture.dmg"
echo -e "\\nCREATE WIRESHARK DISK IMAGE\\n"
printf "\nCreating application disk image\n"
"$dmgbuild" \
--no-hidpi \
-s "$settings_file" \
"$vol_name" \
"$img_name" || exit 1
-s "$app_settings_file" \
"$app_vol_name" \
"$app_img_name" || exit 1
echo -e "\\nSIGN WIRESHARK DISK IMAGE\\n"
dsym_vol_name="Wireshark dSYM ${version}"
dsym_img_name="$dsym_vol_name $architecture.dmg"
printf "\nCreating debugging symbols disk image\n"
"$dmgbuild" \
--no-hidpi \
-s "$dsym_settings_file" \
"$dsym_vol_name" \
"$dsym_img_name" || exit 1
printf "\nSigning disk images\n"
# TN2206, "Signing Disk Images"
if [ -n "$CODE_SIGN_IDENTITY" ] ; then
echo -e "Signing $img_name"
echo -e "Signing $app_img_name and $dsym_img_name"
codesign \
--sign "Developer ID Application: $CODE_SIGN_IDENTITY" \
--timestamp \
--verbose \
"$img_name"
"$app_img_name" "$dsym_img_name"
fi
exit 0

View File

@ -41,7 +41,26 @@ ws_uninstall_path_helper = 'Remove Wireshark from the system path.pkg'
# UDZO - UDIF zlib-compressed image
# UDBZ - UDIF bzip2-compressed image (Mac OS X 10.4+ only)
# ULFO - UDIF lzfse-compressed image (OS X 10.11+ only)
# ULMO - UDIF lzma-compressed image (macOS 10.15+ only)
# Volume format (see hdiutil create -help)
#
# A test with the following bundles resulted in the following .dmg sizes,
# measured with `du -sm`:
# 182 Wireshark.app
# 267 Wireshark.dSYM
#
# UDBZ
# 51 Wireshark 3.7.0 Intel 64.dmg
# 81 Wireshark dSYM 3.7.0 Intel 64.dmg
#
# ULFO
# 51 Wireshark 3.7.0 Intel 64.dmg
# 81 Wireshark dSYM 3.7.0 Intel 64.dmg
#
# ULMO
# 40 Wireshark 3.7.0 Intel 64.dmg
# 50 Wireshark dSYM 3.7.0 Intel 64.dmg
format = defines.get('format', 'UDBZ')
# Compression level (if relevant)

View File

@ -0,0 +1,136 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import biplist
import os.path
#
# Example settings file for dmgbuild
#
# Adapted from https://raw.githubusercontent.com/al45tair/dmgbuild/master/examples/settings.py
# Use like this: dmgbuild -s settings.py "Test Volume" test.dmg
# You can actually use this file for your own application (not just TextEdit)
# by doing e.g.
#
# dmgbuild -s settings.py -D app=/path/to/My.app "My Application" MyApp.dmg
# .. Useful stuff ..............................................................
ws_version = '@VERSION@'
ws_volname = 'Wireshark Debugging Symbols' + ws_version
ws_srcdir = '@CMAKE_SOURCE_DIR@'
ws_bindir = '@CMAKE_BINARY_DIR@'
ws_app_dsym = 'Wireshark.dSYM'
ws_readme_dsym = 'Debugging symbols installation.html'
# .. Basics ....................................................................
# Uncomment to override the output filename
# filename = ws_volname + ' Intel 64.dmg'
# Uncomment to override the output volume name
# volume_name = 'Wireshark ' + ws_version
# From the hdiutil man page:
# UDZO - UDIF zlib-compressed image
# UDBZ - UDIF bzip2-compressed image (Mac OS X 10.4+ only)
# ULFO - UDIF lzfse-compressed image (OS X 10.11+ only)
# ULMO - UDIF lzma-compressed image (macOS 10.15+ only)
# Volume format (see hdiutil create -help)
format = defines.get('format', 'UDBZ')
# Compression level (if relevant)
compression_level = 9
# Volume size
size = None
# Files to include
files = [
os.path.join(ws_bindir, 'run', ws_app_dsym),
os.path.join(ws_bindir, 'packaging', 'macosx', ws_readme_dsym),
]
# Symlinks to create
symlinks = {
'Applications': '/Applications',
}
# Volume icon
#
# You can either define icon, in which case that icon file will be copied to the
# image, *or* you can define badge_icon, in which case the icon file you specify
# will be used to badge the system's Removable Disk icon
#
badge_icon = os.path.join(ws_srcdir, 'packaging', 'macosx', 'wsiconvol.icns')
#badge_icon = icon_from_app(application)
# Where to put the icons
icon_locations = {
ws_app_dsym: ( 80, 64),
'Applications': (240, 64),
ws_readme_dsym: (160, 170),
}
# .. Window configuration ......................................................
# Background
#
# This is a STRING containing any of the following:
#
# #3344ff - web-style RGB color
# #34f - web-style RGB color, short form (#34f == #3344ff)
# rgb(1,0,0) - RGB color, each value is between 0 and 1
# hsl(120,1,.5) - HSL (hue saturation lightness) color
# hwb(300,0,0) - HWB (hue whiteness blackness) color
# cmyk(0,1,0,0) - CMYK color
# goldenrod - X11/SVG named color
# builtin-arrow - A simple built-in background with a blue arrow
# /foo/bar/baz.png - The path to an image file
#
# The hue component in hsl() and hwb() may include a unit; it defaults to
# degrees ('deg'), but also supports radians ('rad') and gradians ('grad'
# or 'gon').
#
# Other color components may be expressed either in the range 0 to 1, or
# as percentages (e.g. 60% is equivalent to 0.6).
background = os.path.join(ws_srcdir, 'packaging', 'macosx', 'dmg_background.png')
show_status_bar = False
show_tab_view = False
show_toolbar = False
show_pathbar = False
show_sidebar = False
sidebar_width = 180
# Window position in ((x, y), (w, h)) format
window_rect = ((600, 200), (350, 325))
# Select the default view; must be one of
#
# 'icon-view'
# 'list-view'
# 'column-view'
# 'coverflow'
#
default_view = 'icon-view'
# General view configuration
show_icon_preview = False
# Set these to True to force inclusion of icon/list view settings (otherwise
# we only include settings for the default view)
include_icon_view_settings = 'auto'
include_list_view_settings = 'auto'
# .. Icon view configuration ...................................................
arrange_by = None
grid_offset = (0, 0)
#grid_spacing = 100
scroll_position = (0, 0)
#label_pos = 'bottom' # or 'right'
text_size = 12
icon_size = 72