diff --git a/.github/workflows/flutter-nightly.yml b/.github/workflows/flutter-nightly.yml
index e4b049a02..7ce940b89 100644
--- a/.github/workflows/flutter-nightly.yml
+++ b/.github/workflows/flutter-nightly.yml
@@ -142,13 +142,42 @@ jobs:
job:
- {
target: x86_64-apple-darwin,
- os: macos-10.15,
+ os: macos-latest,
extra-build-args: "",
}
steps:
- name: Checkout source code
uses: actions/checkout@v3
+ - name: Import the codesign cert
+ uses: apple-actions/import-codesign-certs@v1
+ with:
+ p12-file-base64: ${{ secrets.MACOS_P12_BASE64 }}
+ p12-password: ${{ secrets.MACOS_P12_PASSWORD }}
+ keychain: rustdesk
+
+ - name: Check sign and import sign key
+ run: |
+ security default-keychain -s rustdesk.keychain
+ security find-identity -v
+
+ - name: Import notarize key
+ uses: timheuer/base64-to-file@v1.2
+ with:
+ # https://gregoryszorc.com/docs/apple-codesign/stable/apple_codesign_rcodesign.html#notarizing-and-stapling
+ fileName: rustdesk.json
+ fileDir: ${{ github.workspace }}
+ encodedString: ${{ secrets.MACOS_NOTARIZE_JSON }}
+
+ - name: Install rcodesign tool
+ shell: bash
+ run: |
+ pushd /tmp
+ wget https://github.com/indygreg/apple-platform-rs/releases/download/apple-codesign%2F0.22.0/apple-codesign-0.22.0-macos-universal.tar.gz
+ tar -zxvf apple-codesign-0.22.0-macos-universal.tar.gz
+ mv apple-codesign-0.22.0-macos-universal/rcodesign /usr/local/bin
+ popd
+
- name: Install build runtime
run: |
brew install llvm create-dmg nasm yasm cmake gcc wget ninja
@@ -158,7 +187,6 @@ jobs:
with:
channel: "stable"
flutter-version: ${{ env.FLUTTER_VERSION }}
- cache: true
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
@@ -177,8 +205,12 @@ jobs:
run: |
dart pub global activate ffigen --version 5.0.1
# flutter_rust_bridge
- pushd /tmp && git clone https://github.com/SoLongAndThanksForAllThePizza/flutter_rust_bridge --depth=1 && popd
- pushd /tmp/flutter_rust_bridge/frb_codegen && cargo install --path . && popd
+ pushd /tmp
+ wget https://github.com/Kingtous/flutter_rust_bridge/releases/download/1.32.0-rustdesk/flutter_rust_bridge_codegen-x86_64-darwin.tgz
+ tar -zxvf flutter_rust_bridge_codegen-x86_64-darwin.tgz
+ mkdir -p ~/.cargo/bin
+ mv flutter_rust_bridge_codegen ~/.cargo/bin; chmod +x ~/.cargo/bin/flutter_rust_bridge_codegen
+ popd
pushd flutter && flutter pub get && popd
~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart
@@ -192,10 +224,6 @@ jobs:
run: |
$VCPKG_ROOT/vcpkg install libvpx libyuv opus
- - name: Install cargo bundle tools
- run: |
- cargo install cargo-bundle
-
- name: Show version information (Rust, cargo, Clang)
shell: bash
run: |
@@ -211,6 +239,18 @@ jobs:
# --hwcodec not supported on macos yet
./build.py --flutter ${{ matrix.job.extra-build-args }}
+ - name: Codesign app and create signed dmg
+ run: |
+ security default-keychain -s rustdesk.keychain
+ security unlock-keychain -p ${{ secrets.MACOS_P12_PASSWORD }} rustdesk.keychain
+ # start sign the rustdesk.app and dmg
+ rm rustdesk-${{ env.VERSION }}.dmg || true
+ codesign --force --options runtime -s ${{ secrets.MACOS_CODESIGN_IDENTITY }} --deep ./flutter/build/macos/Build/Products/Release/rustdesk.app -v
+ create-dmg --icon "rustdesk.app" 200 190 --hide-extension "rustdesk.app" --window-size 800 400 --app-drop-link 600 185 rustdesk-${{ env.VERSION }}.dmg ./flutter/build/macos/Build/Products/Release/rustdesk.app
+ codesign --force --options runtime -s ${{ secrets.MACOS_CODESIGN_IDENTITY }} --deep rustdesk-${{ env.VERSION }}.dmg -v
+ # notarize the rustdesk-${{ env.VERSION }}.dmg
+ rcodesign notary-submit --api-key-path ${{ github.workspace }}/rustdesk.json --staple rustdesk-${{ env.VERSION }}.dmg
+
- name: Rename rustdesk
run: |
for name in rustdesk*??.dmg; do
diff --git a/build.py b/build.py
index f0131ad27..75d6fcd89 100755
--- a/build.py
+++ b/build.py
@@ -305,7 +305,8 @@ def build_flutter_deb(version, features):
def build_flutter_dmg(version, features):
if not skip_cargo:
- os.system(f'cargo build --features {features} --lib --release')
+ # set minimum osx build target, now is 10.14, which is the same as the flutter xcode project
+ os.system(f'MACOSX_DEPLOYMENT_TARGET=10.14 cargo build --features {features} --lib --release')
# copy dylib
os.system(
"cp target/release/liblibrustdesk.dylib target/release/librustdesk.dylib")
diff --git a/flutter/macos/Runner.xcodeproj/project.pbxproj b/flutter/macos/Runner.xcodeproj/project.pbxproj
index e375623f0..b935ab4b2 100644
--- a/flutter/macos/Runner.xcodeproj/project.pbxproj
+++ b/flutter/macos/Runner.xcodeproj/project.pbxproj
@@ -411,6 +411,7 @@
CODE_SIGN_IDENTITY = "-";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_HARDENED_RUNTIME = YES;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -436,8 +437,11 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
+ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
+ DEVELOPMENT_TEAM = "";
+ ENABLE_HARDENED_RUNTIME = YES;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@@ -492,6 +496,7 @@
CODE_SIGN_IDENTITY = "-";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_HARDENED_RUNTIME = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -546,6 +551,7 @@
CODE_SIGN_IDENTITY = "-";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_HARDENED_RUNTIME = YES;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -558,15 +564,15 @@
MACOSX_DEPLOYMENT_TARGET = 10.14;
MTL_ENABLE_DEBUG_INFO = NO;
ONLY_ACTIVE_ARCH = YES;
- SDKROOT = macosx;
- SWIFT_COMPILATION_MODE = wholemodule;
- SWIFT_OPTIMIZATION_LEVEL = "-O";
OTHER_LDFLAGS = (
"-sectcreate",
__CGPreLoginApp,
__cgpreloginapp,
/dev/null,
);
+ SDKROOT = macosx;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
};
name = Release;
};
@@ -577,8 +583,11 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
+ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
+ DEVELOPMENT_TEAM = "";
+ ENABLE_HARDENED_RUNTIME = YES;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@@ -604,8 +613,11 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements;
+ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
+ DEVELOPMENT_TEAM = "";
+ ENABLE_HARDENED_RUNTIME = YES;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@@ -616,16 +628,16 @@
../../target/release,
);
MACOSX_DEPLOYMENT_TARGET = 10.14;
- PRODUCT_BUNDLE_IDENTIFIER = com.carriez.rustdesk;
- PROVISIONING_PROFILE_SPECIFIER = "";
- "SWIFT_OBJC_BRIDGING_HEADER[arch=*]" = Runner/bridge_generated.h;
- SWIFT_VERSION = 5.0;
OTHER_LDFLAGS = (
"-sectcreate",
__CGPreLoginApp,
__cgpreloginapp,
/dev/null,
);
+ PRODUCT_BUNDLE_IDENTIFIER = com.carriez.rustdesk;
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ "SWIFT_OBJC_BRIDGING_HEADER[arch=*]" = Runner/bridge_generated.h;
+ SWIFT_VERSION = 5.0;
};
name = Release;
};
diff --git a/flutter/macos/Runner/DebugProfile.entitlements b/flutter/macos/Runner/DebugProfile.entitlements
index 9f56413f3..b52c39df4 100644
--- a/flutter/macos/Runner/DebugProfile.entitlements
+++ b/flutter/macos/Runner/DebugProfile.entitlements
@@ -6,6 +6,8 @@
com.apple.security.cs.allow-jit
+ com.apple.security.device.audio-input
+
com.apple.security.network.server
diff --git a/flutter/macos/Runner/Release.entitlements b/flutter/macos/Runner/Release.entitlements
index 08ba3a3fa..7f588d928 100644
--- a/flutter/macos/Runner/Release.entitlements
+++ b/flutter/macos/Runner/Release.entitlements
@@ -4,6 +4,10 @@
com.apple.security.app-sandbox
+ com.apple.security.cs.allow-jit
+
+ com.apple.security.device.audio-input
+
com.apple.security.network.client