1
0
mirror of https://github.com/bitwarden/browser synced 2026-02-10 13:40:06 +00:00

Moves the autofill extension building to after pack

This commit is contained in:
Nathan Ansel
2025-02-25 21:59:25 -06:00
parent 2304c2b313
commit 81f7edeb5e
8 changed files with 171 additions and 28 deletions

View File

@@ -1149,7 +1149,7 @@ jobs:
- name: Set up provisioning profiles
run: |
cp $HOME/secrets/bitwarden_desktop_autofill_app_store_2024.provisionprofile \
cp $HOME/secrets/bitwarden_desktop_appstore.provisionprofile \
$GITHUB_WORKSPACE/apps/desktop/bitwarden_desktop_appstore.provisionprofile
mkdir -p $HOME/Library/MobileDevice/Provisioning\ Profiles
@@ -1243,7 +1243,7 @@ jobs:
APP_STORE_CONNECT_AUTH_KEY_PATH: ~/private_keys/AuthKey_6TV9MKN3GP.p8
DEBUG: electron-osx-sign*
CSC_FOR_PULL_REQUEST: true
run: npm run pack:mac:mas:with-extension
run: npm run pack:mac:mas
- name: Upload .pkg artifact
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
@@ -1421,7 +1421,7 @@ jobs:
- name: Set up provisioning profiles
run: |
cp $HOME/secrets/bitwarden_desktop_autofill_app_store_2024.provisionprofile \
cp $HOME/secrets/bitwarden_desktop_appstore.provisionprofile \
$GITHUB_WORKSPACE/apps/desktop/bitwarden_desktop_appstore.provisionprofile
mkdir -p $HOME/Library/MobileDevice/Provisioning\ Profiles
@@ -1517,7 +1517,7 @@ jobs:
APP_STORE_CONNECT_TEAM_ISSUER: ${{ secrets.APP_STORE_CONNECT_TEAM_ISSUER }}
APP_STORE_CONNECT_AUTH_KEY_PATH: ~/private_keys/AuthKey_6TV9MKN3GP.p8
DEBUG: electron-osx-sign*
run: npm run pack:mac:masdev:with-extension
run: npm run pack:mac:masdev
- name: Zip masdev asset
run: |

View File

@@ -0,0 +1,11 @@
//
// Debug.xcconfig
// desktop
//
// Created by Nathan Ansel on 2/20/25.
//
// Configuration settings file format documentation can be found at:
// https://help.apple.com/xcode/#/dev745c5c974
CODE_SIGN_IDENTITY = Apple Development
PROVISIONING_PROFILE_SPECIFIER = Bitwarden Desktop Autofill Development 2024

View File

@@ -1,5 +1,5 @@
//
// Production.xcconfig
// ReleaseAppStore.xcconfig
// desktop
//
// Created by Vince Grassia on 7/25/24.

View File

@@ -0,0 +1,11 @@
//
// ReleaseDeveloper.xcconfig
// desktop
//
// Created by Nathan Ansel on 2/20/25.
//
// Configuration settings file format documentation can be found at:
// https://help.apple.com/xcode/#/dev745c5c974
CODE_SIGN_IDENTITY = Developer ID Application
PROVISIONING_PROFILE_SPECIFIER = Bitwarden Desktop Autofill Developer 2024

View File

@@ -17,7 +17,9 @@
/* Begin PBXFileReference section */
3368DB382C654B8100896B75 /* BitwardenMacosProviderFFI.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = BitwardenMacosProviderFFI.xcframework; path = ../desktop_native/macos_provider/BitwardenMacosProviderFFI.xcframework; sourceTree = "<group>"; };
3368DB3A2C654F3800896B75 /* BitwardenMacosProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BitwardenMacosProvider.swift; sourceTree = "<group>"; };
968ED08A2C52A47200FFFEE6 /* Production.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Production.xcconfig; sourceTree = "<group>"; };
968ED08A2C52A47200FFFEE6 /* ReleaseAppStore.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ReleaseAppStore.xcconfig; sourceTree = "<group>"; };
D83832AB2D67B9AE003FB9F8 /* Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
D83832AD2D67B9D0003FB9F8 /* ReleaseDeveloper.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ReleaseDeveloper.xcconfig; sourceTree = "<group>"; };
E1DF713C2B342F6900F29026 /* autofill-extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "autofill-extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
E1DF713E2B342F6900F29026 /* AuthenticationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AuthenticationServices.framework; path = System/Library/Frameworks/AuthenticationServices.framework; sourceTree = SDKROOT; };
E1DF71412B342F6900F29026 /* CredentialProviderViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CredentialProviderViewController.swift; sourceTree = "<group>"; };
@@ -42,7 +44,9 @@
E1DF711D2B342E2800F29026 = {
isa = PBXGroup;
children = (
968ED08A2C52A47200FFFEE6 /* Production.xcconfig */,
D83832AB2D67B9AE003FB9F8 /* Debug.xcconfig */,
968ED08A2C52A47200FFFEE6 /* ReleaseAppStore.xcconfig */,
D83832AD2D67B9D0003FB9F8 /* ReleaseDeveloper.xcconfig */,
E1DF71402B342F6900F29026 /* autofill-extension */,
E1DF713D2B342F6900F29026 /* Frameworks */,
E1DF71272B342E2800F29026 /* Products */,
@@ -166,8 +170,96 @@
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
D83832AE2D67BA84003FB9F8 /* ReleaseDeveloper */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = D83832AD2D67B9D0003FB9F8 /* ReleaseDeveloper.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_ENTITLEMENTS = "autofill-extension/autofill_extension.entitlements";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MACOSX_DEPLOYMENT_TARGET = 14.2;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = macosx;
SWIFT_COMPILATION_MODE = wholemodule;
};
name = ReleaseDeveloper;
};
D83832AF2D67BA84003FB9F8 /* ReleaseDeveloper */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_ENTITLEMENTS = "autofill-extension/autofill_extension.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=macosx*]" = LTZ2PFU5D6;
ENABLE_HARDENED_RUNTIME = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "autofill-extension/Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = Bitwarden;
INFOPLIST_KEY_NSHumanReadableCopyright = "";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
"@executable_path/../../../../Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "com.bitwarden.desktop.autofill-extension";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "Bitwarden Desktop Autofill App Store 2024";
SKIP_INSTALL = YES;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
};
name = ReleaseDeveloper;
};
E1DF71332B342E2900F29026 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = D83832AB2D67B9AE003FB9F8 /* Debug.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
@@ -223,15 +315,16 @@
MACOSX_DEPLOYMENT_TARGET = 14.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
ONLY_ACTIVE_ARCH = NO;
SDKROOT = macosx;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
};
name = Debug;
};
E1DF71342B342E2900F29026 /* Release */ = {
E1DF71342B342E2900F29026 /* ReleaseAppStore */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 968ED08A2C52A47200FFFEE6 /* ReleaseAppStore.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
@@ -284,7 +377,7 @@
SDKROOT = macosx;
SWIFT_COMPILATION_MODE = wholemodule;
};
name = Release;
name = ReleaseAppStore;
};
E1DF714C2B342F6900F29026 /* Debug */ = {
isa = XCBuildConfiguration;
@@ -316,7 +409,7 @@
};
name = Debug;
};
E1DF714D2B342F6900F29026 /* Release */ = {
E1DF714D2B342F6900F29026 /* ReleaseAppStore */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_ENTITLEMENTS = "autofill-extension/autofill_extension.entitlements";
@@ -344,7 +437,7 @@
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
};
name = Release;
name = ReleaseAppStore;
};
/* End XCBuildConfiguration section */
@@ -353,19 +446,21 @@
isa = XCConfigurationList;
buildConfigurations = (
E1DF71332B342E2900F29026 /* Debug */,
E1DF71342B342E2900F29026 /* Release */,
E1DF71342B342E2900F29026 /* ReleaseAppStore */,
D83832AE2D67BA84003FB9F8 /* ReleaseDeveloper */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
defaultConfigurationName = ReleaseAppStore;
};
E1DF714E2B342F6900F29026 /* Build configuration list for PBXNativeTarget "autofill-extension" */ = {
isa = XCConfigurationList;
buildConfigurations = (
E1DF714C2B342F6900F29026 /* Debug */,
E1DF714D2B342F6900F29026 /* Release */,
E1DF714D2B342F6900F29026 /* ReleaseAppStore */,
D83832AF2D67BA84003FB9F8 /* ReleaseDeveloper */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
defaultConfigurationName = ReleaseAppStore;
};
/* End XCConfigurationList section */
};

View File

@@ -23,7 +23,6 @@
"build:dev": "concurrently -n Main,Rend -c yellow,cyan \"npm run build:main:dev\" \"npm run build:renderer:dev\"",
"build:preload": "cross-env NODE_ENV=production webpack --config webpack.preload.js",
"build:preload:watch": "cross-env NODE_ENV=production webpack --config webpack.preload.js --watch",
"build:macos-extension": "./desktop_native/macos_provider/build.sh && node scripts/build-macos-extension.js",
"build:main": "cross-env NODE_ENV=production webpack --config webpack.main.js",
"build:main:dev": "npm run build-native && cross-env NODE_ENV=development webpack --config webpack.main.js",
"build:main:watch": "npm run build-native && cross-env NODE_ENV=development webpack --config webpack.main.js --watch",
@@ -39,18 +38,14 @@
"pack:mac": "npm run clean:dist && electron-builder --mac --universal -p never",
"pack:mac:arm64": "npm run clean:dist && electron-builder --mac --arm64 -p never",
"pack:mac:mas": "npm run clean:dist && electron-builder --mac mas --universal -p never",
"pack:mac:mas:with-extension": "npm run clean:dist && npm run build:macos-extension && electron-builder --mac mas --universal -p never",
"pack:mac:masdev": "npm run clean:dist && electron-builder --mac mas-dev --universal -p never",
"pack:mac:masdev:with-extension": "npm run clean:dist && npm run build:macos-extension && electron-builder --mac mas-dev --universal -p never",
"pack:win": "npm run clean:dist && electron-builder --win --x64 --arm64 --ia32 -p never -c.win.certificateSubjectName=\"8bit Solutions LLC\"",
"pack:win:ci": "npm run clean:dist && electron-builder --win --x64 --arm64 --ia32 -p never",
"dist:dir": "npm run build && npm run pack:dir",
"dist:lin": "npm run build && npm run pack:lin",
"dist:mac": "npm run build && npm run pack:mac",
"dist:mac:mas": "npm run build && npm run pack:mac:mas",
"dist:mac:mas:with-extension": "npm run build && npm run pack:mac:mas:with-extension",
"dist:mac:masdev": "npm run build && npm run pack:mac:masdev",
"dist:mac:masdev:with-extension": "npm run build && npm run pack:mac:masdev:with-extension",
"dist:win": "npm run build && npm run pack:win",
"dist:win:ci": "npm run build && npm run pack:win:ci",
"publish:lin": "npm run build && npm run clean:dist && electron-builder --linux --x64 -p always",

View File

@@ -5,6 +5,7 @@ const path = require("path");
const { notarize } = require("@electron/notarize");
const { deepAssign } = require("builder-util");
const fse = require("fs-extra");
const buildExtension = require('./build-macos-extension.js');
exports.default = run;
@@ -16,12 +17,19 @@ async function run(context) {
const appPath = `${context.appOutDir}/${appName}.app`;
const macBuild = context.electronPlatformName === "darwin";
const copySafariExtension = ["darwin", "mas"].includes(context.electronPlatformName);
const copyAutofillExtension = ["mas"].includes(context.electronPlatformName);
const copyAutofillExtension = ["darwin", "mas"].includes(context.electronPlatformName);
const isTempBuild = context.appOutDir.includes("temp");
let shouldResign = false;
// cannot use extraFiles because it modifies the extensions .plist and makes it invalid
if (copyAutofillExtension) {
if (!isTempBuild) {
await buildExtension.default(context);
} else {
console.log("### Packing in a temporary build location - skipping autofill extension build");
}
console.log("### Copying autofill extension");
const extensionPath = path.join(__dirname, "../macos/dist/autofill-extension.appex");
if (!fse.existsSync(extensionPath)) {

View File

@@ -10,10 +10,13 @@ const paths = {
extensionDistDir: "./macos/dist",
extensionDist: "./macos/dist/autofill-extension.appex",
macOsProject: "./macos/desktop.xcodeproj",
macOsConfig: "./macos/production.xcconfig",
};
async function buildMacOs() {
exports.default = buildMacOs;
async function buildMacOs(context) {
console.log("### Building Autofill Extension");
if (fse.existsSync(paths.macosBuild)) {
fse.removeSync(paths.macosBuild);
}
@@ -22,15 +25,35 @@ async function buildMacOs() {
fse.removeSync(paths.extensionDistDir);
}
let configuration;
if (context !== undefined) {
// Extract the first target name (assuming there's at least one target)
const appOutDir = context.appOutDir;
if (appOutDir.includes("mas-dev")) {
configuration = "Debug";
} else if (appOutDir.includes("mas")) {
configuration = "ReleaseAppStore";
} else if (appOutDir.includes("mac")) {
configuration = "ReleaseDeveloper";
} else {
console.log("########## UNABLE TO DETERMINE CONFIGURATION ##########");
console.log("########## Skipping Autofill Extension Build ##########");
return;
}
} else {
console.log("### No context found, defaulting to the Debug configuration");
configuration = "Debug";
}
const proc = child.spawn("xcodebuild", [
"-project",
paths.macOsProject,
"-alltargets",
"-configuration",
"Release",
// Uncomment when signing is fixed
"-xcconfig",
paths.macOsConfig,
configuration,
"CODE_SIGN_INJECT_BASE_ENTITLEMENTS=NO",
"OTHER_CODE_SIGN_FLAGS='--timestamp'"
]);
stdOutProc(proc);
await new Promise((resolve, reject) =>