Let FSKit vaults mount without a mount point via fskit-nio-adapter 0.2.0 and the fskit.mount entitlement

This commit is contained in:
Tobias Hagemann
2026-10-12 21:18:55 +02:00
parent 27990e5b56
commit 4631b084ed
6 changed files with 22 additions and 23 deletions
+2 -7
View File
@@ -238,6 +238,7 @@ jobs:
rm -r ${OUTPUT_PATH}
fi
done
dist/mac/verify-provisioning-profile.sh Cryptomator.app/Contents/embedded.provisionprofile "${TEAM_IDENTIFIER}.org.cryptomator" com.apple.developer.fskit.mount
echo "Codesigning Cryptomator.app..."
sed -i '' "s|###APP_IDENTIFIER_PREFIX###|${TEAM_IDENTIFIER}.|g" dist/mac/Cryptomator.entitlements
sed -i '' "s|###TEAM_IDENTIFIER###|${TEAM_IDENTIFIER}|g" dist/mac/Cryptomator.entitlements
@@ -256,13 +257,7 @@ jobs:
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${VERSION_NUM}" ${APPEX_PATH}/Contents/Info.plist
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${REVISION_NUM}" ${APPEX_PATH}/Contents/Info.plist
echo -n "$PROVISIONING_PROFILE_BASE64" | base64 --decode --output ${APPEX_PATH}/Contents/embedded.provisionprofile
PROFILE_PLIST=$(security cms -D -i ${APPEX_PATH}/Contents/embedded.provisionprofile)
PROFILE_APP_IDENTIFIER=$(plutil -extract 'Entitlements.com\.apple\.application-identifier' raw -o - - <<< "${PROFILE_PLIST}" 2>/dev/null || true)
PROFILE_FSMODULE=$(plutil -extract 'Entitlements.com\.apple\.developer\.fskit\.fsmodule' raw -o - - <<< "${PROFILE_PLIST}" 2>/dev/null || true)
if [[ "${PROFILE_APP_IDENTIFIER}" != "${TEAM_IDENTIFIER}.org.cryptomator.fskit" ]] || [[ "${PROFILE_FSMODULE}" != "true" ]]; then
>&2 echo "Provisioning profile is not for ${TEAM_IDENTIFIER}.org.cryptomator.fskit with com.apple.developer.fskit.fsmodule"
exit 1
fi
dist/mac/verify-provisioning-profile.sh ${APPEX_PATH}/Contents/embedded.provisionprofile "${TEAM_IDENTIFIER}.org.cryptomator.fskit" com.apple.developer.fskit.fsmodule
echo "Codesigning FSKit extension..."
sed -i '' "s|###APP_IDENTIFIER_PREFIX###|${TEAM_IDENTIFIER}.|g" dist/mac/FSKitExtension.entitlements
sed -i '' "s|###TEAM_IDENTIFIER###|${TEAM_IDENTIFIER}|g" dist/mac/FSKitExtension.entitlements
+2 -7
View File
@@ -237,6 +237,7 @@ jobs:
rm -r ${OUTPUT_PATH}
fi
done
dist/mac/verify-provisioning-profile.sh Cryptomator.app/Contents/embedded.provisionprofile "${TEAM_IDENTIFIER}.org.cryptomator" com.apple.developer.fskit.mount
echo "Codesigning Cryptomator.app..."
sed -i '' "s|###APP_IDENTIFIER_PREFIX###|${TEAM_IDENTIFIER}.|g" dist/mac/Cryptomator.entitlements
sed -i '' "s|###TEAM_IDENTIFIER###|${TEAM_IDENTIFIER}|g" dist/mac/Cryptomator.entitlements
@@ -255,13 +256,7 @@ jobs:
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${VERSION_NUM}" ${APPEX_PATH}/Contents/Info.plist
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${REVISION_NUM}" ${APPEX_PATH}/Contents/Info.plist
echo -n "$PROVISIONING_PROFILE_BASE64" | base64 --decode --output ${APPEX_PATH}/Contents/embedded.provisionprofile
PROFILE_PLIST=$(security cms -D -i ${APPEX_PATH}/Contents/embedded.provisionprofile)
PROFILE_APP_IDENTIFIER=$(plutil -extract 'Entitlements.com\.apple\.application-identifier' raw -o - - <<< "${PROFILE_PLIST}" 2>/dev/null || true)
PROFILE_FSMODULE=$(plutil -extract 'Entitlements.com\.apple\.developer\.fskit\.fsmodule' raw -o - - <<< "${PROFILE_PLIST}" 2>/dev/null || true)
if [[ "${PROFILE_APP_IDENTIFIER}" != "${TEAM_IDENTIFIER}.org.cryptomator.fskit" ]] || [[ "${PROFILE_FSMODULE}" != "true" ]]; then
>&2 echo "Provisioning profile is not for ${TEAM_IDENTIFIER}.org.cryptomator.fskit with com.apple.developer.fskit.fsmodule"
exit 1
fi
dist/mac/verify-provisioning-profile.sh ${APPEX_PATH}/Contents/embedded.provisionprofile "${TEAM_IDENTIFIER}.org.cryptomator.fskit" com.apple.developer.fskit.fsmodule
echo "Codesigning FSKit extension..."
sed -i '' "s|###APP_IDENTIFIER_PREFIX###|${TEAM_IDENTIFIER}.|g" dist/mac/FSKitExtension.entitlements
sed -i '' "s|###TEAM_IDENTIFIER###|${TEAM_IDENTIFIER}|g" dist/mac/FSKitExtension.entitlements
+2
View File
@@ -4,6 +4,8 @@
<dict>
<key>com.apple.application-identifier</key>
<string>###APP_IDENTIFIER_PREFIX###org.cryptomator</string>
<key>com.apple.developer.fskit.mount</key>
<true/>
<key>com.apple.developer.team-identifier</key>
<string>###TEAM_IDENTIFIER###</string>
<key>com.apple.security.cs.allow-jit</key>
+4 -7
View File
@@ -52,8 +52,12 @@ if [ -n "${CODESIGN_IDENTITY}" ]; then
command -v codesign >/dev/null 2>&1 || { echo >&2 "codesign not found. Fix by 'xcode-select --install'."; exit 1; }
if [[ ! `security find-identity -v -p codesigning | grep -w "${CODESIGN_IDENTITY}"` ]]; then echo "Given codesign identity is invalid."; exit 1; fi
fi
if [ -n "${CODESIGN_IDENTITY}" ] && [ -n "${TEAM_IDENTIFIER}" ]; then
../verify-provisioning-profile.sh ../embedded.provisionprofile "${TEAM_IDENTIFIER}.${PACKAGE_IDENTIFIER}" com.apple.developer.fskit.mount || exit 1
fi
if [ -n "${CODESIGN_IDENTITY}" ] && [ -n "${TEAM_IDENTIFIER}" ] && [ "${JAVAFX_ARCH}" = "aarch64" ]; then
[ -f ../fskit-extension.provisionprofile ] || { echo >&2 "FSKit extension provisioning profile not found at dist/mac/fskit-extension.provisionprofile."; exit 1; }
../verify-provisioning-profile.sh ../fskit-extension.provisionprofile "${TEAM_IDENTIFIER}.${PACKAGE_IDENTIFIER}.fskit" com.apple.developer.fskit.fsmodule || exit 1
fi
# download and check jmods
@@ -183,13 +187,6 @@ if [ -n "${CODESIGN_IDENTITY}" ] && [ -n "${TEAM_IDENTIFIER}" ]; then
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${VERSION_NO}" ${APPEX_PATH}/Contents/Info.plist || exit 1
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${REVISION_NO}" ${APPEX_PATH}/Contents/Info.plist || exit 1
cp ../fskit-extension.provisionprofile ${APPEX_PATH}/Contents/embedded.provisionprofile || exit 1
PROFILE_PLIST=$(security cms -D -i ${APPEX_PATH}/Contents/embedded.provisionprofile) || exit 1
PROFILE_APP_IDENTIFIER=$(plutil -extract 'Entitlements.com\.apple\.application-identifier' raw -o - - <<< "${PROFILE_PLIST}" 2>/dev/null)
PROFILE_FSMODULE=$(plutil -extract 'Entitlements.com\.apple\.developer\.fskit\.fsmodule' raw -o - - <<< "${PROFILE_PLIST}" 2>/dev/null)
if [[ "${PROFILE_APP_IDENTIFIER}" != "${TEAM_IDENTIFIER}.${PACKAGE_IDENTIFIER}.fskit" ]] || [[ "${PROFILE_FSMODULE}" != "true" ]]; then
>&2 echo "Provisioning profile is not for ${TEAM_IDENTIFIER}.${PACKAGE_IDENTIFIER}.fskit with com.apple.developer.fskit.fsmodule"
exit 1
fi
echo "Codesigning FSKit extension..."
cp ../FSKitExtension.entitlements . || exit 1
sed -i '' "s|###APP_IDENTIFIER_PREFIX###|${TEAM_IDENTIFIER}.|g" FSKitExtension.entitlements || exit 1
+10
View File
@@ -0,0 +1,10 @@
#!/bin/bash
if [ $# -ne 3 ]; then echo "Usage: $0 <provisioning-profile> <application-identifier> <entitlement>" 1>&2; exit 1; fi
PROFILE_PLIST=$(security cms -D -i "$1") || exit 1
PROFILE_APP_IDENTIFIER=$(plutil -extract 'Entitlements.com\.apple\.application-identifier' raw -o - - <<< "${PROFILE_PLIST}" 2>/dev/null)
PROFILE_ENTITLEMENT=$(plutil -extract "Entitlements.${3//./\\.}" raw -o - - <<< "${PROFILE_PLIST}" 2>/dev/null)
if [[ "${PROFILE_APP_IDENTIFIER}" != "$2" ]] || [[ "${PROFILE_ENTITLEMENT}" != "true" ]]; then
>&2 echo "Provisioning profile $1 is not for $2 with $3"
exit 1
fi
+2 -2
View File
@@ -40,8 +40,8 @@
<cryptomator.integrations.mac.version>1.5.0</cryptomator.integrations.mac.version>
<cryptomator.integrations.linux.version>1.8.0-beta1</cryptomator.integrations.linux.version>
<cryptomator.fuse.version>6.0.1</cryptomator.fuse.version>
<!-- on every bump, compare dist/mac/FSKitExtension.entitlements with fskit/Bundle/FSKitNioExtension.entitlements in fskit-nio-adapter at that tag -->
<cryptomator.fskit.version>0.1.0</cryptomator.fskit.version>
<!-- on every bump, check the entitlements and provisioning profiles in dist/mac against "Embed the extension in an app" in the README of fskit-nio-adapter at that tag -->
<cryptomator.fskit.version>0.2.0</cryptomator.fskit.version>
<cryptomator.webdav.version>3.0.2</cryptomator.webdav.version>
<cryptomator.webdav-servlet.version>1.2.12</cryptomator.webdav-servlet.version>