From 976017ae559dc444b4e8989b501ff2e5b6d6800f Mon Sep 17 00:00:00 2001 From: Alexander Yuzhin Date: Tue, 7 Apr 2020 12:09:31 +0300 Subject: [PATCH] Build via fastlane --- .gitignore | 13 +++- macos/Gemfile | 4 ++ macos/ONLYOFFICE.xcodeproj/project.pbxproj | 2 +- .../Resources/ONLYOFFICE/Info.plist | 2 +- macos/fastlane/Appfile | 3 + macos/fastlane/Fastfile | 66 ++++++++++++++++++ macos/fastlane/resources/appdmg.json | 12 ++++ macos/fastlane/resources/background.png | Bin 0 -> 8332 bytes macos/fastlane/resources/background@2x.png | Bin 0 -> 19611 bytes 9 files changed, 97 insertions(+), 5 deletions(-) create mode 100644 macos/Gemfile create mode 100644 macos/fastlane/Appfile create mode 100644 macos/fastlane/Fastfile create mode 100644 macos/fastlane/resources/appdmg.json create mode 100755 macos/fastlane/resources/background.png create mode 100755 macos/fastlane/resources/background@2x.png diff --git a/.gitignore b/.gitignore index 4d3d8d3e8..e1c9132d4 100644 --- a/.gitignore +++ b/.gitignore @@ -38,8 +38,15 @@ common/converter/* .DS_Store *.xcuserstate *.xcuserdatad -.idea -macos/Vendor/ONLYOFFICE -macos/Production/Production/ONLYOFFICE.app *.xcscmblueprint +.idea +.env.secret dsa_priv.pem +Gemfile.lock +package-lock.json +macos/build +macos/fastlane/node_modules +macos/fastlane/README.md +macos/fastlane/report.xml +macos/Vendor/ONLYOFFICE +macos/Production/Production/ONLYOFFICE.app \ No newline at end of file diff --git a/macos/Gemfile b/macos/Gemfile new file mode 100644 index 000000000..621ca1d0b --- /dev/null +++ b/macos/Gemfile @@ -0,0 +1,4 @@ +source "https://rubygems.org" + +gem "fastlane" +gem "dotenv" \ No newline at end of file diff --git a/macos/ONLYOFFICE.xcodeproj/project.pbxproj b/macos/ONLYOFFICE.xcodeproj/project.pbxproj index 7216fba5e..dc4b6f4b1 100644 --- a/macos/ONLYOFFICE.xcodeproj/project.pbxproj +++ b/macos/ONLYOFFICE.xcodeproj/project.pbxproj @@ -1159,7 +1159,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "#!/bin/sh\n\n#exit 0\n\nbase_path=$(pwd)\ncontents_path=${CONFIGURATION_BUILD_DIR}/${CONTENTS_FOLDER_PATH}\nframeworks_path=\"${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\nconverter_path=\"${contents_path}/Resources/converter\"\ncore_path=\"${base_path}/../../build_tools/out/mac_64/onlyoffice/desktopeditors\"\n\n# Signs a framework with the provided identity\ncode_sign_if_enabled() {\n if [ -n \"${EXPANDED_CODE_SIGN_IDENTITY:-}\" -a \"${CODE_SIGNING_REQUIRED:-}\" != \"NO\" -a \"${CODE_SIGNING_ALLOWED}\" != \"NO\" ]; then\n # Use the current code_sign_identity\n echo \"Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}\"\n local code_sign_cmd=\"/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'\"\n\n echo \"$code_sign_cmd\"\n eval \"$code_sign_cmd\"\n fi\n}\n\n# Change path of dependency library\nchange_dependency_path() {\n echo \"Rename path for $1 from $2 to $3\"\n install_name_tool -change \"$2\" \"$3\" \"$1\"\n}\n\nrm -rf \"${frameworks_path}/Chromium Embedded Framework.framework\"\nrm -rf \"${frameworks_path}/editors_helper.app\"\nrm -rf \"${frameworks_path}/editors_helper (GPU).app\"\nrm -rf \"${frameworks_path}/editors_helper (Renderer).app\"\nrm -rf \"${frameworks_path}/libascdocumentscore.dylib\"\nrm -rf \"${frameworks_path}/libooxmlsignature.dylib\"\nrm -rf \"${frameworks_path}/libhunspell.dylib\"\n\nif [ ! -d \"${frameworks_path}\" ]; then\nmkdir -p \"${frameworks_path}\"\nfi\n\necho \"Copy libraries and frameworks\"\ncp -Rv \"${core_path}/editors_helper.app\" \"${frameworks_path}/\"\ncp -Rv \"${core_path}/editors_helper (GPU).app\" \"${frameworks_path}/\"\ncp -Rv \"${core_path}/editors_helper (Renderer).app\" \"${frameworks_path}/\"\ncp -Rv \"${core_path}/Chromium Embedded Framework.framework\" \"${frameworks_path}\"\ncp -Rv \"${core_path}/libascdocumentscore.dylib\" \"${frameworks_path}\"\ncp -Rv \"${core_path}/libooxmlsignature.dylib\" \"${frameworks_path}\"\ncp -Rv \"${core_path}/libhunspell.dylib\" \"${frameworks_path}\"\n\n# Fixed paths application\necho \"Fixed dependency paths of application\"\nchange_dependency_path \"${contents_path}/MacOS/${TARGET_NAME}\" \"@executable_path/../Frameworks/Chromium Embedded Framework.framework/Chromium Embedded Framework\" \"@rpath/Chromium Embedded Framework.framework/Chromium Embedded Framework\"\nchange_dependency_path \"${contents_path}/MacOS/${TARGET_NAME}\" libascdocumentscore.dylib @rpath/libascdocumentscore.dylib\nchange_dependency_path \"${contents_path}/MacOS/${TARGET_NAME}\" libooxmlsignature.dylib @rpath/libooxmlsignature.dylib\n\n# Resign the code if required by the build settings to avoid unstable apps\necho \"Sign libraries and frameworks with ${EXPANDED_CODE_SIGN_IDENTITY_NAME}\"\n\ncode_sign_if_enabled \"${frameworks_path}/libooxmlsignature.dylib\"\ncode_sign_if_enabled \"${frameworks_path}/libascdocumentscore.dylib\"\ncode_sign_if_enabled \"${frameworks_path}/libhunspell.dylib\"\n\ncode_sign_if_enabled \"${converter_path}/libicudata.58.dylib\"\ncode_sign_if_enabled \"${converter_path}/libicuuc.58.dylib\"\ncode_sign_if_enabled \"${converter_path}/libUnicodeConverter.dylib\"\ncode_sign_if_enabled \"${converter_path}/libkernel.dylib\"\ncode_sign_if_enabled \"${converter_path}/libgraphics.dylib\"\ncode_sign_if_enabled \"${converter_path}/libdoctrenderer.dylib\"\ncode_sign_if_enabled \"${converter_path}/libPdfWriter.dylib\"\ncode_sign_if_enabled \"${converter_path}/libDjVuFile.dylib\"\ncode_sign_if_enabled \"${converter_path}/libPdfReader.dylib\"\ncode_sign_if_enabled \"${converter_path}/libXpsFile.dylib\"\ncode_sign_if_enabled \"${converter_path}/libHtmlFile.dylib\"\ncode_sign_if_enabled \"${converter_path}/libHtmlRenderer.dylib\"\n\ncodesign --verbose --force --options runtime --entitlements \"${CODE_SIGN_ENTITLEMENTS}\" --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" \"${converter_path}/x2t\"\n\ncodesign --verbose=4 --force --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" \"${frameworks_path}/Chromium Embedded Framework.framework/\"\ncodesign --verbose=4 --force --options runtime --entitlements \"${CODE_SIGN_ENTITLEMENTS}\" --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" \"${frameworks_path}/editors_helper.app/\"\ncodesign --verbose=4 --force --options runtime --entitlements \"${CODE_SIGN_ENTITLEMENTS}\" --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" \"${frameworks_path}/editors_helper (GPU).app/\"\ncodesign --verbose=4 --force --options runtime --entitlements \"${CODE_SIGN_ENTITLEMENTS}\" --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" \"${frameworks_path}/editors_helper (Renderer).app/\"\n\ncodesign --verbose --force --deep -o runtime --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" \"${frameworks_path}/Sparkle.framework/Versions/A/Resources/AutoUpdate.app\"\ncodesign --verbose --force -o runtime --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" \"${frameworks_path}/Sparkle.framework/Versions/A\"\n\n"; + shellScript = "#!/bin/sh\n\n#exit 0\n\nbase_path=$(pwd)\ncontents_path=${CONFIGURATION_BUILD_DIR}/${CONTENTS_FOLDER_PATH}\nframeworks_path=\"${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\nconverter_path=\"${contents_path}/Resources/converter\"\ncore_path=\"${base_path}/../../build_tools/out/mac_64/onlyoffice/desktopeditors\"\n\n# Signs a framework with the provided identity\ncode_sign_if_enabled() {\n if [ -n \"${EXPANDED_CODE_SIGN_IDENTITY:-}\" -a \"${CODE_SIGNING_REQUIRED:-}\" != \"NO\" -a \"${CODE_SIGNING_ALLOWED}\" != \"NO\" ]; then\n # Use the current code_sign_identity\n echo \"Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}\"\n local code_sign_cmd=\"/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'\"\n\n echo \"$code_sign_cmd\"\n eval \"$code_sign_cmd\"\n fi\n}\n\n# Change path of dependency library\nchange_dependency_path() {\n echo \"Rename path for $1 from $2 to $3\"\n install_name_tool -change \"$2\" \"$3\" \"$1\"\n}\n\nrm -rf \"${frameworks_path}/Chromium Embedded Framework.framework\"\nrm -rf \"${frameworks_path}/editors_helper.app\"\nrm -rf \"${frameworks_path}/editors_helper (GPU).app\"\nrm -rf \"${frameworks_path}/editors_helper (Renderer).app\"\nrm -rf \"${frameworks_path}/libascdocumentscore.dylib\"\nrm -rf \"${frameworks_path}/libooxmlsignature.dylib\"\nrm -rf \"${frameworks_path}/libhunspell.dylib\"\n\nif [ ! -d \"${frameworks_path}\" ]; then\nmkdir -p \"${frameworks_path}\"\nfi\n\necho \"Copy libraries and frameworks\"\ncp -Rv \"${core_path}/editors_helper.app\" \"${frameworks_path}/\"\ncp -Rv \"${core_path}/editors_helper (GPU).app\" \"${frameworks_path}/\"\ncp -Rv \"${core_path}/editors_helper (Renderer).app\" \"${frameworks_path}/\"\ncp -Rv \"${core_path}/Chromium Embedded Framework.framework\" \"${frameworks_path}\"\ncp -Rv \"${core_path}/libascdocumentscore.dylib\" \"${frameworks_path}\"\ncp -Rv \"${core_path}/libooxmlsignature.dylib\" \"${frameworks_path}\"\ncp -Rv \"${core_path}/libhunspell.dylib\" \"${frameworks_path}\"\n\n# Fixed paths application\necho \"Fixed dependency paths of application\"\nchange_dependency_path \"${contents_path}/MacOS/${TARGET_NAME}\" \"@executable_path/../Frameworks/Chromium Embedded Framework.framework/Chromium Embedded Framework\" \"@rpath/Chromium Embedded Framework.framework/Chromium Embedded Framework\"\nchange_dependency_path \"${contents_path}/MacOS/${TARGET_NAME}\" libascdocumentscore.dylib @rpath/libascdocumentscore.dylib\nchange_dependency_path \"${contents_path}/MacOS/${TARGET_NAME}\" libooxmlsignature.dylib @rpath/libooxmlsignature.dylib\n\n# Resign the code if required by the build settings to avoid unstable apps\necho \"Sign libraries and frameworks with ${EXPANDED_CODE_SIGN_IDENTITY_NAME}\"\n\ncode_sign_if_enabled \"${frameworks_path}/libooxmlsignature.dylib\"\ncode_sign_if_enabled \"${frameworks_path}/libascdocumentscore.dylib\"\ncode_sign_if_enabled \"${frameworks_path}/libhunspell.dylib\"\n\ncode_sign_if_enabled \"${converter_path}/libicudata.58.dylib\"\ncode_sign_if_enabled \"${converter_path}/libicuuc.58.dylib\"\ncode_sign_if_enabled \"${converter_path}/libUnicodeConverter.dylib\"\ncode_sign_if_enabled \"${converter_path}/libkernel.dylib\"\ncode_sign_if_enabled \"${converter_path}/libgraphics.dylib\"\ncode_sign_if_enabled \"${converter_path}/libdoctrenderer.dylib\"\ncode_sign_if_enabled \"${converter_path}/libPdfWriter.dylib\"\ncode_sign_if_enabled \"${converter_path}/libDjVuFile.dylib\"\ncode_sign_if_enabled \"${converter_path}/libPdfReader.dylib\"\ncode_sign_if_enabled \"${converter_path}/libXpsFile.dylib\"\ncode_sign_if_enabled \"${converter_path}/libHtmlFile.dylib\"\ncode_sign_if_enabled \"${converter_path}/libHtmlRenderer.dylib\"\n\ncodesign --verbose --force --options runtime --entitlements \"${CODE_SIGN_ENTITLEMENTS}\" --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" \"${converter_path}/x2t\"\n\ncodesign --verbose=4 --force --deep --options runtime --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" \"${frameworks_path}/Chromium Embedded Framework.framework/Libraries/libEGL.dylib\"\ncodesign --verbose=4 --force --deep --options runtime --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" \"${frameworks_path}/Chromium Embedded Framework.framework/Libraries/libswiftshader_libEGL.dylib\"\ncodesign --verbose=4 --force --deep --options runtime --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" \"${frameworks_path}/Chromium Embedded Framework.framework/Libraries/libGLESv2.dylib\"\ncodesign --verbose=4 --force --deep --options runtime --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" \"${frameworks_path}/Chromium Embedded Framework.framework/Libraries/libswiftshader_libGLESv2.dylib\"\ncodesign --verbose=4 --force --deep --options runtime --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" \"${frameworks_path}/Chromium Embedded Framework.framework\"\ncodesign --verbose=4 --force --options runtime --entitlements \"${CODE_SIGN_ENTITLEMENTS}\" --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" \"${frameworks_path}/editors_helper.app/\"\ncodesign --verbose=4 --force --options runtime --entitlements \"${CODE_SIGN_ENTITLEMENTS}\" --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" \"${frameworks_path}/editors_helper (GPU).app/\"\ncodesign --verbose=4 --force --options runtime --entitlements \"${CODE_SIGN_ENTITLEMENTS}\" --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" \"${frameworks_path}/editors_helper (Renderer).app/\"\n\ncodesign --verbose --force --deep --options runtime --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" \"${frameworks_path}/Sparkle.framework/Versions/A/Resources/AutoUpdate.app\"\ncodesign --verbose --force --options runtime --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" \"${frameworks_path}/Sparkle.framework/Versions/A\"\n\ncodesign --verbose=4 --force --options runtime --entitlements \"${CODE_SIGN_ENTITLEMENTS}\" --sign \"${EXPANDED_CODE_SIGN_IDENTITY}\" \"${contents_path}/MacOS/${TARGET_NAME}\"\n"; showEnvVarsInLog = 0; }; FC5A2D271BABF6E1001ACEB1 /* Copy Library */ = { diff --git a/macos/ONLYOFFICE/Resources/ONLYOFFICE/Info.plist b/macos/ONLYOFFICE/Resources/ONLYOFFICE/Info.plist index 64a42eea5..f0ff12ba5 100644 --- a/macos/ONLYOFFICE/Resources/ONLYOFFICE/Info.plist +++ b/macos/ONLYOFFICE/Resources/ONLYOFFICE/Info.plist @@ -294,7 +294,7 @@ CFBundleSignature ???? CFBundleVersion - 378 + 390 LSApplicationCategoryType public.app-category.productivity LSMinimumSystemVersion diff --git a/macos/fastlane/Appfile b/macos/fastlane/Appfile new file mode 100644 index 000000000..29cf0c994 --- /dev/null +++ b/macos/fastlane/Appfile @@ -0,0 +1,3 @@ +app_identifier "com.onlyoffice.ONLYOFFICE" # The bundle identifier of your app +apple_id ENV["APPLE_ID"] # Your Apple email address +team_id ENV["TEAM_ID"] # Developer Portal Team ID \ No newline at end of file diff --git a/macos/fastlane/Fastfile b/macos/fastlane/Fastfile new file mode 100644 index 000000000..becf90552 --- /dev/null +++ b/macos/fastlane/Fastfile @@ -0,0 +1,66 @@ +# This file contains the fastlane.tools configuration +# You can find the documentation at https://docs.fastlane.tools +# +# For a list of all available actions, check out +# +# https://docs.fastlane.tools/actions +# +# For a list of all available plugins, check out +# +# https://docs.fastlane.tools/plugins/available-plugins +# + +# Uncomment the line if you want fastlane to automatically update itself +# update_fastlane + +# This is the minimum version number required. +# Update this, if you use features of a newer version +fastlane_version "2.3.1" + +fastlane_require 'dotenv' +Dotenv.load '.env.secret' + +default_platform :mac + +platform :mac do + lane :release do + build = "build" + scheme = "ONLYOFFICE" + app = "#{build}/#{scheme}.app" + + desc 'Cleanup' + sh("rm -rf ../#{build}") + + desc 'Build for developer id and notarize' + gym( + scheme: scheme, + configuration: 'Release', + clean: true, + output_directory: build, + codesigning_identity: 'Developer ID Application', + export_method: 'developer-id', + skip_package_pkg: true + ) + + notarize( + package: app, + print_log: true, + verbose: true + ) + + version = get_version_number( + target: scheme + ) + + desc 'Prepare zip for delta update' + zip( + path: app, + output_path: "#{build}/#{scheme}-#{version}.zip" + ) + + desc 'Create DMG image' + sh("npm install appdmg") + sh("npx appdmg resources/appdmg.json ../#{build}/#{scheme}.dmg") + end + +end \ No newline at end of file diff --git a/macos/fastlane/resources/appdmg.json b/macos/fastlane/resources/appdmg.json new file mode 100644 index 000000000..b60b45f69 --- /dev/null +++ b/macos/fastlane/resources/appdmg.json @@ -0,0 +1,12 @@ +{ + "title": "ONLYOFFICE", + "background": "background.png", + "icon-size": 128, + "code-sign": { + "signing-identity": "Developer ID Application: Ascensio System SIA (2WH24U26GJ)" + }, + "contents": [ + { "x": 193, "y": 210, "type": "file", "path": "../../build/ONLYOFFICE.app" }, + { "x": 445, "y": 212, "type": "link", "path": "/Applications" } + ] +} \ No newline at end of file diff --git a/macos/fastlane/resources/background.png b/macos/fastlane/resources/background.png new file mode 100755 index 0000000000000000000000000000000000000000..18ea973ce2f78ed5236d578a267c5c2ad3924949 GIT binary patch literal 8332 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 NxvZ*8iIiEu{{o#0R2={S literal 0 HcmV?d00001 diff --git a/macos/fastlane/resources/background@2x.png b/macos/fastlane/resources/background@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..cfe3e8cc354da542688635a0a6ec43021dd89e7a GIT binary patch literal 19611 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