diff --git a/Makefile b/Makefile index 680caa364..aa3f669a6 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,6 @@ clean: xcodebuild -project $(PROJECT) -scheme Vienna -configuration Development clean xcodebuild -project $(PROJECT) -scheme Vienna -configuration Deployment clean rm -fr Build - rm -fr DerivedData localize: for locale in $(LOCALES); do \ diff --git a/README.md b/README.md index 9a157236c..b57484a7a 100644 --- a/README.md +++ b/README.md @@ -16,8 +16,8 @@ Version 3.9 of Vienna will require a minimum of macOS 10.13 (High Sierra). Vienna 3.8.x require a minimum of macOS 10.12 (Sierra). Vienna 3.6.x and 3.7.x require a minimum of OS X 10.11 (El Capitan). -Vienna 3.5.x requires a minimum of OS X 10.9 (Mavericks). -Vienna 3.1.x to 3.4.x require a minimum of OS X 10.8 (Mountain Lion). +Vienna 3.2.x to 3.5.x require a minimum of OS X 10.9 (Mavericks). +Vienna 3.1.x requires a minimum of OS X 10.8 (Mountain Lion). Vienna 3.0.x requires a minimum of OS X 10.6 (Snow Leopard). diff --git a/Release Instructions.md b/Release Instructions.md index 94af43015..7cc0acb94 100644 --- a/Release Instructions.md +++ b/Release Instructions.md @@ -5,9 +5,7 @@ Instructions for building and uploading Vienna binaries to Github and Sourceforg ### Build settings In Xcode->File->Project settingsā€¦, you should have : -- Build System : New Build System -- Derived Data : Project-relative Location - - DerivedData +- Derived Data : Default Location - Advancedā€¦ : Build Location : Custom : Relative to Workspace - Products : Build/Products - Intermediates : Build/Intermediates.noindex @@ -24,9 +22,6 @@ should be exactly the name of your certificate as it is stored in Keychain. `PRIVATE_EDDSA_KEY_PATH` should be the location of the private EdDSA (ed25519) key used by Sparkle 2, which for obvious security reasons should not be located in the source directory ! -`PRIVATE_KEY_PATH` -should be the location of the (legacy) private DSA key used by Sparkle, which for obvious security reasons should not be located in the source directory ! - If you want to go further in automation of package building, you will have to define three additional environment variables in the `CS-ID.xcconfig` file. These ones are used to automate the use of the `notarytool` command line tool as described in [this page of Apple's documentation](https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution/customizing_the_notarization_workflow). `APP_STORE_ID` @@ -43,7 +38,6 @@ For instance, the content of my `Scripts/Resources/CS-ID.xcconfig` file looks li CODE_SIGN_IDENTITY = Developer ID Application: Barijaona Ramaholimihaso PRIVATE_EDDSA_KEY_PATH = $(SRCROOT)/../secrets/vienna_private_eddsa_key.pem - PRIVATE_KEY_PATH = $(SRCROOT)/../secrets/vienna_private_key.pem APP_STORE_ID = barijaona@mac.com KEYCHAIN_PROFILE = AC_PASSWORD TEAM_ID = KUU2LM7U9K @@ -86,7 +80,7 @@ There are two distinct ways to get the different files needed to publish an upda - Select the latest archive, click the "Distribute App" button, - Select "Developer ID" as method of distribution, - Accept the values proposed in the following prompts, -- Wait for the upload to finish, then a mail notification from Apple informing you that the software was successfully notarized, +- Wait for the upload to finish, then the message informing you that the software was successfully notarized, - Close the organizer, select scheme "Deployment" at the top of Xcode's main window, - Run the Deployment scheme, - The Uploads window should open in the Finder after a while. diff --git a/Scripts/Release-for-upload.sh b/Scripts/Release-for-upload.sh index e7fd32b8b..b0dfd6ce5 100755 --- a/Scripts/Release-for-upload.sh +++ b/Scripts/Release-for-upload.sh @@ -36,10 +36,10 @@ tar -a -cf "${TGZ_FILENAME}" --exclude '.DS_Store' Vienna.app rm -rf Vienna.app # Output the sparkle change log -SPARKLE_BIN="${SOURCE_ROOT}/DerivedData/Vienna/SourcePackages/artifacts/Sparkle/bin" +SPARKLE_BIN=$(find "${SDK_STAT_CACHE_DIR}" -regex "${SDK_STAT_CACHE_DIR}/${PROJECT}-.*/SourcePackages/artifacts/sparkle/Sparkle/bin") if [ ! -d "$SPARKLE_BIN" ]; then - printf 'Unable to locate Sparkle binaries in the binary Swift Package. ' 1>&2 + printf 'Unable to locate Sparkle binaries in DerivedData. ' 1>&2 printf 'Resolve the Swift Packages in Xcode first.\n' 1>&2 exit 1 fi @@ -54,19 +54,7 @@ if [ ! -f "$PRIVATE_EDDSA_KEY_PATH" ]; then fi ED_SIGNATURE_AND_LENGTH="$(sign_update "$TGZ_FILENAME" -f "$PRIVATE_EDDSA_KEY_PATH")" -# Generate DSA signature (deprecated; used for backwards compatibility). This -# command outputs only a signature string, cf. the EdDSA signature string. -if [ ! -f "$PRIVATE_KEY_PATH" ]; then - printf 'Unable to load signing private key vienna_private_key.pem. ' 1>&2 - printf 'Set PRIVATE_KEY_PATH in Scripts/Resources/CS-ID.xcconfig\n' 1>&2 - exit 1 -fi - -export PATH="$SPARKLE_BIN/old_dsa_scripts:$PATH" - -DSA_SIGNATURE="sparkle:dsaSignature=\"$(sign_update "$TGZ_FILENAME" "$PRIVATE_KEY_PATH")\"" - -pubDate="$(LC_TIME=en_US TZ=GMT date -jf '%FT%TZ' "${VCS_DATE}" '+%a, %d %b %G %T %z')" +pubDate="$(LC_ALL=en_US.UTF8 TZ=GMT date -jf '%FT%TZ' "${VCS_DATE}" '+%a, %d %b %G %T %z')" cat > "${VIENNA_CHANGELOG}" << EOF @@ -84,9 +72,45 @@ cat > "${VIENNA_CHANGELOG}" << EOF ${N_VCS_NUM} ${V_VCS_TAG} :${VCS_SHORT_HASH}: ${MACOSX_DEPLOYMENT_TARGET}.0 - + https://www.vienna-rss.com/sparkle-files/noteson${N_VCS_TAG}.html + + Vienna 3.8.7 :15608906: + Sun, 16 Apr 2023 11:30:01 +0000 + https://github.com/ViennaRSS/vienna-rss/releases/tag/v%2F3.8.7 + 8038 + 3.8.7 :15608906: + 10.12.0 + + https://www.vienna-rss.com/sparkle-files/noteson3.8.7.html + + + Vienna 3.7.5 :e811b5c2: + Sun, 28 Aug 2022 09:13:53 +0000 + https://github.com/ViennaRSS/vienna-rss/releases/tag/v%2F3.7.5 + 7567 + 3.7.5 :e811b5c2: + 10.11.0 + + https://www.vienna-rss.com/sparkle-files/noteson3.7.5.html + + + Vienna 3.5.10 :9b26c77b: + Sun, 08 Nov 2020 11:58:56 +0000 + https://github.com/ViennaRSS/vienna-rss/releases/tag/v%2F3.5.10 + 10.9.0 + + https://www.vienna-rss.com/sparkle-files/noteson3.5.10.html + + + Vienna 3.1.16 :891d05ea: + Mon, 25 Sep 2017 22:08:32 +0000 + https://github.com/ViennaRSS/vienna-rss/releases/tag/v%2F3.1.16 + 10.8.0 + + https://www.vienna-rss.com/sparkle-files/noteson3.1.16.html + diff --git a/Scripts/generate_keys.rb b/Scripts/generate_keys.rb deleted file mode 100755 index b22439c7a..000000000 --- a/Scripts/generate_keys.rb +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/ruby -["dsaparam.pem", "dsa_priv.pem", "dsa_pub.pem"].each do |file| - if File.exist? file - puts "There's already a #{file} here! Move it aside or be more careful!" - end -end -`openssl dsaparam 2048 < /dev/urandom > dsaparam.pem` -`openssl gendsa dsaparam.pem -out dsa_priv.pem` -`openssl dsa -in dsa_priv.pem -pubout -out dsa_pub.pem` -`rm dsaparam.pem` -puts "\nGenerated private and public keys: dsa_priv.pem and dsa_pub.pem.\n -BACK UP YOUR PRIVATE KEY AND KEEP IT SAFE!\n -If you lose it, your users will be unable to upgrade!\n" \ No newline at end of file diff --git a/Scripts/sign_update.rb b/Scripts/sign_update.rb deleted file mode 100755 index 6d03e2ef0..000000000 --- a/Scripts/sign_update.rb +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/ruby -if ARGV.length < 2 - puts "Usage: ruby sign_update.rb update_archive private_key" - exit -end - -puts `openssl dgst -sha1 -binary < "#{ARGV[0]}" | openssl dgst -dss1 -sign "#{ARGV[1]}" | openssl enc -base64` \ No newline at end of file diff --git a/Vienna.xcodeproj/project.pbxproj b/Vienna.xcodeproj/project.pbxproj index e3444cb96..1556b65aa 100644 --- a/Vienna.xcodeproj/project.pbxproj +++ b/Vienna.xcodeproj/project.pbxproj @@ -98,11 +98,12 @@ 3A500129259A640D00AA6AAD /* ArticleStyleLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F2280372271B18A005D1023 /* ArticleStyleLoader.swift */; }; 3A50014E259AA2BE00AA6AAD /* WebKitArticleConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FC4A18F257CF775005FF227 /* WebKitArticleConverter.swift */; }; 3A60E60B2114AD740004D81D /* URLRequestExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A60E60A2114AD740004D81D /* URLRequestExtensions.m */; }; + 3A78208729FF534100570771 /* ArchivalChecks.sh in Resources */ = {isa = PBXBuildFile; fileRef = 3A78208629FF534100570771 /* ArchivalChecks.sh */; }; + 3A78208929FF536400570771 /* PostArchive.sh in Resources */ = {isa = PBXBuildFile; fileRef = 3A78208829FF536400570771 /* PostArchive.sh */; }; 3A7BD0DD1989AC7700E9444B /* VNAVerticallyCenteredTextFieldCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A7BD0DC1989AC7700E9444B /* VNAVerticallyCenteredTextFieldCell.m */; }; 3A8D9AE325A9DA4B0016F30F /* ArticleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A8D9AE225A9DA4B0016F30F /* ArticleTests.swift */; }; 3AB95743258DBC5A00C54E83 /* Browser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FDF6FC5218A26B0002F77E9 /* Browser.swift */; }; 3AC411A526BBFDFD004A8700 /* WebKitArticleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AC411A426BBFDFD004A8700 /* WebKitArticleView.swift */; }; - 3AEE7DE91695FC570018A17D /* SparkleDSAPublicKey.pem in Resources */ = {isa = PBXBuildFile; fileRef = 3AEE7DE81695FC570018A17D /* SparkleDSAPublicKey.pem */; }; 435026E6165DD8BE0018EDB7 /* ArticleRef.m in Sources */ = {isa = PBXBuildFile; fileRef = 435026E5165DD8BE0018EDB7 /* ArticleRef.m */; }; 4350283E165DE7F60018EDB7 /* NSNotificationAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4350283D165DE7F60018EDB7 /* NSNotificationAdditions.m */; }; 43502895165DE9E00018EDB7 /* ActivityLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 43502848165DE9DF0018EDB7 /* ActivityLog.m */; }; @@ -358,6 +359,8 @@ 3A60E6092114AD740004D81D /* URLRequestExtensions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = URLRequestExtensions.h; sourceTree = ""; }; 3A60E60A2114AD740004D81D /* URLRequestExtensions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = URLRequestExtensions.m; sourceTree = ""; }; 3A6CC18623BBA49D0084ABEE /* Codesigning.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Codesigning.xcconfig; sourceTree = ""; }; + 3A78208629FF534100570771 /* ArchivalChecks.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = ArchivalChecks.sh; sourceTree = ""; }; + 3A78208829FF536400570771 /* PostArchive.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = PostArchive.sh; sourceTree = ""; }; 3A7BD0DB1989AC7700E9444B /* VNAVerticallyCenteredTextFieldCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VNAVerticallyCenteredTextFieldCell.h; sourceTree = ""; }; 3A7BD0DC1989AC7700E9444B /* VNAVerticallyCenteredTextFieldCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VNAVerticallyCenteredTextFieldCell.m; sourceTree = ""; }; 3A8D9AE225A9DA4B0016F30F /* ArticleTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArticleTests.swift; sourceTree = ""; }; @@ -365,7 +368,6 @@ 3A932D8923BB999A009B8061 /* ViennaDeployment.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = ViennaDeployment.entitlements; sourceTree = ""; }; 3AC411A426BBFDFD004A8700 /* WebKitArticleView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebKitArticleView.swift; sourceTree = ""; }; 3ADBA70C23DDAFCA00156722 /* Notarize.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = Notarize.sh; sourceTree = ""; }; - 3AEE7DE81695FC570018A17D /* SparkleDSAPublicKey.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SparkleDSAPublicKey.pem; sourceTree = ""; }; 430C4ADB1661753F0079C9FC /* autorevision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = autorevision.h; sourceTree = ""; }; 430C4AE0166175C20079C9FC /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 435026E5165DD8BE0018EDB7 /* ArticleRef.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ArticleRef.m; sourceTree = ""; }; @@ -1208,7 +1210,9 @@ children = ( 2FE5DE71294641550089490B /* CombinePredicateTranslations */, 439824191666B37000FFE219 /* autorevision.sh */, + 3A78208629FF534100570771 /* ArchivalChecks.sh */, 3A5482F7168F5F4800887F91 /* Sparkle-setup.sh */, + 3A78208829FF536400570771 /* PostArchive.sh */, 4398241A1666B37000FFE219 /* Changes-and-Notes.sh */, 3ADBA70C23DDAFCA00156722 /* Notarize.sh */, 4398241C1666B37000FFE219 /* Release-for-upload.sh */, @@ -1265,7 +1269,6 @@ F63DA1721F1CEFC3007CBED4 /* Strings */, 03F33D951DF2A2F900B04FAF /* Assets.xcassets */, F6209C5923D3FFA700D5537D /* Vienna.sdef */, - 3AEE7DE81695FC570018A17D /* SparkleDSAPublicKey.pem */, ); path = Resources; sourceTree = ""; @@ -1876,12 +1879,13 @@ F6D572B41E26AA9900CDA909 /* InfoWindow.xib in Resources */, F6832F681F10F5DA007920D4 /* MainWindowController.xib in Resources */, 3A0F2A55258FBB8B0036397F /* TabbedBrowserViewController.xib in Resources */, + 3A78208729FF534100570771 /* ArchivalChecks.sh in Resources */, 3A0F2A9E258FCB780036397F /* BrowserTab.xib in Resources */, F6D572BA1E26AAA900CDA909 /* SearchFolder.xib in Resources */, F626F5F424A76B9100D3AAD8 /* Preferences.storyboard in Resources */, - 3AEE7DE91695FC570018A17D /* SparkleDSAPublicKey.pem in Resources */, F6209C5A23D3FFA700D5537D /* Vienna.sdef in Resources */, F62580E71E286CEC0035E43C /* RSSSources.plist in Resources */, + 3A78208929FF536400570771 /* PostArchive.sh in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1984,6 +1988,7 @@ }; EAAF336614BEF4DF002A8837 /* Release For Upload */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -1999,6 +2004,7 @@ }; F6743B10224BB6980054FE1E /* Build Release Notes */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); diff --git a/Vienna/Info.plist b/Vienna/Info.plist index 5f8b80caa..fa820940e 100644 --- a/Vienna/Info.plist +++ b/Vienna/Info.plist @@ -142,8 +142,6 @@ SUEnableInstallerLauncherService - SUPublicDSAKeyFile - SparkleDSAPublicKey.pem SUPublicEDKey nPwwT+poO5Kmi1NZkE5OveKB8lvQVY20N22E8jgxLCg= UTExportedTypeDeclarations diff --git a/Vienna/Resources/SparkleDSAPublicKey.pem b/Vienna/Resources/SparkleDSAPublicKey.pem deleted file mode 100644 index 69c4f9b2c..000000000 --- a/Vienna/Resources/SparkleDSAPublicKey.pem +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIIDOzCCAi4GByqGSM44BAEwggIhAoIBAQD9mBIXQzsMWtw/yNvo3pNwLcJL0Hlr -k7xC0xJcy+Qb8rWjsgbS/zxzKmycUsARwNj0klF7AGffoPcjeHsaU2YM7hhLFgdg -KFxYu/15Adv5v4EPsMKjihR786r1yBeh46y+jfErzDV54Ij6RpSn0DgPgtJL84sx -LCSavT5rKvNjjMZM8MHfrPlmUeTefdqC/W27ULRBH2N96ikR5xrymzRTTLlLzlXK -1kXBKujSKWzoiGv9kU6HZJ42zAO7VIglbQxNwJsNdggPTD2UfC6hN4oPB6YLzgQo -ucbxdEamJ3zy1CKDMG2VhNhsdVSaHqfLkz5PckMrohwJaT3ALOJyuYGdAhUA9kif -n/Y0QDqdNbgeI8tMcUSFnWUCggEBAO67WbDbvxAL++8d5TH2H6f0ht/AdjnzgHWr -SFhxAOxrYHCorNM02OXFX5N8BzZLbFqdg0W+QggS/FFOmWeKNGxFLb9qwW93DB8Z -fD3ndWz4LKULoB63Ouq0NwyNo8AzsT6uRNExFLlk3eV3u559KWoH8v+P9g++eRfq -CKILV0f6CC8y+ZseGezmuLJEb+ll2+WIJ4gRZ+sbRoGtdoOtYaJ+eI2azN6sE8ep -FwAxyER1X24cyLZk5i+J3qUcbRUVANCBChGSrcW4XEJknEkp82mvBGiFOvt2GGQo -oRcSv8puR42oNZvfvmCVS21W0fEnsGCknaW/mh9ZiwPk4zxhNIkDggEFAAKCAQBc -IT/Z2jhEfQDZUYfY59nqfOexSEnbnCF2QGMp/vnck2Qp/xnnhMg3KvOH/Z4cIYhG -hgZ1pDlGEub3hParKU7PE5hsKBYezwv2JpAj8NW2VG4qcADU+yAyD/we3XMtXcRA -mXlmxalR9D0wjbSgaRDpUShG6i6cV7KhAGyAw77uDQ4eepulfbwPYHmjgviodp29 -J1teFAU7zOZA6Ndt+JXNMAFE0ger85lEh6OW5HezYlidJgikvFAdBWyMud97O1Jb -OxSIJY2xaIIdsrzVnft+R7w9lpLzkSJOEjPsqdXIbTDI2rfNYBCDsj/qlHU0+pv2 -XwKTAM+0r4KOmWP5r+re ------END PUBLIC KEY-----