Как заставить pkg установщика macOS переименовать приложение? - PullRequest
0 голосов
/ 30 ноября 2018

Я развернул .pkg, который устанавливает приложение в / Applications, а также некоторые вспомогательные продукты.Однако теперь приложение было переименовано.

Когда новый или существующий пользователь приложения устанавливает последнюю версию, я хочу установить его под новым именем.

Например, некоторые пользователи уже установлены и имеют пакет com.example.myapp в "/ Applications / Old Name.app".Но теперь его нужно установить / переместить в "/ Applications / New Name.app".В худшем случае он должен оставить как старое, так и новое.

То, что происходит сейчас, происходит с точностью до наоборот: оно устанавливает приложение new под именем old .Я вижу в журналах установки:

installd [1950]: PackageKit: Applications / New Name.app перемещен в Applications / Old Name.app

Итак, macOS обнаруживаетэто то же самое приложение, но он думает, что пользователь «переместил» его на старое имя и оставил там.Как я могу побудить его придерживаться нового имени?

Я использую комбинацию pkgbuild / productbuild для этого со сценарием фазы сборки, например:

TARGET_SRCROOT="${PROJECT_DIR}/Deployment Package"
# NOTE: the BUILT_PRODUCTS_DIR is a bit different during archive, but close enough relative to other derived data…
PKG_DESTINATION="${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.pkg"
SUBCOMPONENTS_DIR="${TEMP_FILES_DIR}/${PRODUCT_NAME} [deployment components]"
SUBCOMPONENT_PKG="${SUBCOMPONENTS_DIR}/deployment-components.pkg"

mkdir -p "$SUBCOMPONENTS_DIR"
pkgbuild \
--root "$INSTALL_ROOT" \
--identifier "${PRODUCT_BUNDLE_IDENTIFIER}-components" \
--version "$MARKETING_BUNDLE_VERSION" \
--scripts "${TARGET_SRCROOT}/scripts" \
"$SUBCOMPONENT_PKG"

productbuild \
--identifier "$PRODUCT_BUNDLE_IDENTIFIER" \
--version "$MARKETING_BUNDLE_VERSION" \
--distribution "${TARGET_SRCROOT}/distribution.xml" \
--package-path "$SUBCOMPONENTS_DIR" \
"$PKG_DESTINATION"

Так, в частности,Я могу легко настроить свой дистрибутив.xml, а также использовать обычные скрипты pre / postinstall.

...