diff --git a/App/SupportFiles/Info.plist b/App/SupportFiles/Info.plist index 6eb4c391b..133b556d5 100644 --- a/App/SupportFiles/Info.plist +++ b/App/SupportFiles/Info.plist @@ -34,7 +34,7 @@ CFBundleVersion - 23653 + 23665 LSApplicationCategoryType public.app-category.utilities NSHumanReadableCopyright diff --git a/Helper/SupportFiles/Info.plist b/Helper/SupportFiles/Info.plist index 8cb11ac78..d158ce329 100644 --- a/Helper/SupportFiles/Info.plist +++ b/Helper/SupportFiles/Info.plist @@ -19,7 +19,7 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - 23653 + 23665 LSApplicationCategoryType public.app-category.utilities LSBackgroundOnly diff --git a/Mouse Fix.xcodeproj/project.pbxproj b/Mouse Fix.xcodeproj/project.pbxproj index 8f7b2ddfe..98a8a16fb 100644 --- a/Mouse Fix.xcodeproj/project.pbxproj +++ b/Mouse Fix.xcodeproj/project.pbxproj @@ -30,7 +30,6 @@ 4F1D7F4728A4639800253407 /* MenuBarItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F1D7F4628A4639800253407 /* MenuBarItem.swift */; }; 4F28B7F62D49141F006928A6 /* SkyLight.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F28B7F52D49141E006928A6 /* SkyLight.framework */; }; 4F28B7F82D49144E006928A6 /* SkyLight.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F28B7F52D49141E006928A6 /* SkyLight.framework */; }; - 4F28B7F92D49144E006928A6 /* SkyLight.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 4F28B7F52D49141E006928A6 /* SkyLight.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 4F2CC58727B8D2300084AACE /* HybridCurves.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F2CC58627B8D2300084AACE /* HybridCurves.swift */; }; 4F2CC58927B8DA8B0084AACE /* Line.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F2CC58827B8DA8B0084AACE /* Line.swift */; }; 4F2E8FD32D52229100689058 /* NSCoderErrors.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F2E8FD22D52229100689058 /* NSCoderErrors.m */; }; @@ -388,17 +387,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ - 4F28B7FA2D49144E006928A6 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 4F28B7F92D49144E006928A6 /* SkyLight.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; 4F9111F8289FF25D00D2DD8C /* Copy sm_launchd.plist */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -2060,6 +2048,7 @@ 4F5F3EF02756EC0400C350C0 /* RemapSwizzler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RemapSwizzler.m; sourceTree = ""; }; 4F5F3EF22756F1DB00C350C0 /* ScrollModifiers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollModifiers.swift; sourceTree = ""; }; 4F5FC0612D6206E3009DCF10 /* SimpleUnboxing.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SimpleUnboxing.h; sourceTree = ""; }; + 4F5FC1152D63B036009DCF10 /* MMF - Update Checklist - Template.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = "MMF - Update Checklist - Template.md"; sourceTree = ""; }; 4F616D6027BDCD56004A6A72 /* ScrollConfigTesting.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = ScrollConfigTesting.md; sourceTree = ""; }; 4F626E97292A842D00E6FFD5 /* KeyCaptureMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KeyCaptureMode.h; sourceTree = ""; }; 4F626E98292A842D00E6FFD5 /* KeyCaptureMode.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KeyCaptureMode.m; sourceTree = ""; }; @@ -7125,6 +7114,7 @@ 4FEB6618279376C200E6A111 /* notes.md */, 4FE8FC792929D8AC0002583B /* On Bundle Size & Deployment Target.md */, 4F1B41A72D4C06AC00026C94 /* CodeStyle.md */, + 4F5FC1152D63B036009DCF10 /* MMF - Update Checklist - Template.md */, ); path = Notes; sourceTree = ""; @@ -7776,7 +7766,6 @@ 4FCECD7C21092354001F1078 /* Sources */, 4FCECD7D21092354001F1078 /* Frameworks */, 4FCECD7E21092354001F1078 /* Resources */, - 4F28B7FA2D49144E006928A6 /* Embed Frameworks */, ); buildRules = ( ); @@ -8461,7 +8450,7 @@ INFOPLIST_FILE = App/SupportFiles/Info.plist; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; MACOSX_DEPLOYMENT_TARGET = 10.15.0; - MARKETING_VERSION = 3.0.3; + MARKETING_VERSION = "3.0.4 Beta 1"; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.nuebling.mac-mouse-fix"; @@ -8500,7 +8489,7 @@ INFOPLIST_FILE = App/SupportFiles/Info.plist; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; MACOSX_DEPLOYMENT_TARGET = 10.15.0; - MARKETING_VERSION = 3.0.3; + MARKETING_VERSION = "3.0.4 Beta 1"; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.nuebling.mac-mouse-fix"; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/Mouse Fix.xcodeproj/xcuserdata/Noah.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Mouse Fix.xcodeproj/xcuserdata/Noah.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index 3a6c231c3..050f625a5 100644 --- a/Mouse Fix.xcodeproj/xcuserdata/Noah.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/Mouse Fix.xcodeproj/xcuserdata/Noah.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -4,22 +4,6 @@ type = "1" version = "2.0"> - - - - **Might go out of date.** +Some of the points are outdated, + - like the ones talking about a 'prefpane' (Early MMF versions used to be a prefpane.) + - Or some of the ones talking about revoking signing certificates (I don't think that happens anymore since I'm paying for the Apple Developer Program) +It also contains [[Obsidian Links]] which won't work here. Maybe I should move the linked notes into the mac-mouse-fix repo, too. + +---- + +# MMF - Update Checklist - Template + +Pushing an update, Make push ready, publishing, releasing, publishing routine + +The template: [[MMF - Update Checklist - Template]] + +> [!info] +> When moving to Obsidian I couldn't find this note at first. Searched forever. Turns out it's because NotePlan displays notes based on note title, and Obsidian displays them based on filename. Also, NotePlan uses the **initial title** of the note as filename. When you update the title of the note in NotePlan, the filename doesn't change - keep this in mind when searching for notes in the future. + +**App** + +- Config file + - [ ] set the right configVersion + - [ ] make sure default_config is the same as config + - [ ] make sure the updating / replacing of the config file actually works + +- Licensing + - [ ] Update fallback_licenseinfo_config.json to mac-mouse-fix-website + +- Build Settings + - Adjust compiler flags + - Tips: + - For `C`, modify Xcode build setting: `Preprocessor Macros` + - Example: `NDEBUG=1` (Don't forget "= 1") + - For `Swift`, modify Xcode build setting: `Active Compilation Conditions` + - Example: `NDEBUG` (No need for "=1" like with C) + - (All this stuff only applies to MMF 3. MMF 2 only has the DEBUG flag and nothing else as of Sep 2024.) + - [ ] Remove development flags such as `FORCE_EXPIRED` + - [ ] Make sure `NDEBUG=1`/`NDEBUG` flag is set on release builds. (That prevents assert() from crashing the app). + - [ ] Make sure `IS_HELPER` and `IS_MAIN_APP` flags are set correctly. + +- Signing + * [ ] Make sure you sign all targets with the 'Noah Nuebling' team, which is associated with the `redacted`.developer@`redacted`.com Apple ID instead of the 'Noah Nbling' team which is associated with my personal-email Apple ID + - [ ] Make sure you're not revoking any old certificates. + - See [[MMF - Signing Issues - Jan 2022]] + - Also see [[MMF - Bug - Mac Mouse Fix will damage your computer]] + - Hint: Import the code signing identity from Apple Notes into Xcode, it should contain the certificate and prevent creation of new certificates / revoking of old certificate (I hope??) +- Other + - [ ] Set the correct MMF version number and version string in the Xcode project + - Examples: "3.0.0 Beta 7", 21988 + - [ ] Set the correct version string(s) in the prefpane info.plist + - [ ] Make sure Sparkle appcast URLs are correct + +- Build & Export + - [ ] **Clean build folder** before final build + - Note that this will reset the build configuration + - This is still recommended even when using 'Archive' according to this [SO Post](https://stackoverflow.com/a/19202343/10601702) + - [ ] If not prerelease: Make sure to build the Release configuration + - So that it's fast, and assert() doesn't crash + - [ ] If prerelease: Make sure to either build Debug configuration, or include 'beta' or 'alpha' (case insensitive) in the short bundle version + - So that `runningPreRelease()` works right + - Update: Under MMF 3, using Swift we started using Release configuration because Debug is very very slow. + - [ ] Make sure to build for Apple Silicon / Intel + - Does that automatically when building for Release. See Xcode > Build Settings > Architectures + - Doesn't do this automatically when building for Debug (not even when building using the "Archive" option). Choose "Any Mac (Apple Silicon, Intel)" next to the build scheme. + - [ ] Use the "Archive" option to export. (This will still use the build scheme and architecture configured in the Xcode menu bar) + - [ ] Choose 'Direct Distribution' in the Organizer to notarize the app. + - [ ] To get the app bundle after Notarizing, use the 'Export Notarized App' button in the Organizer. + - For 3.0.2 I got the app bundle directly from the .xcarchive via Finder, and I think that [broke things](https://github.com/noah-nuebling/mac-mouse-fix/issues/871). + - [ ] Get dSYMs folder directly from the .xcarchive via Finder. + - Find the .xcarchive by going to the Xcode Organizer and right-clicking the archive in question. + +- Pre-Sparkle (we added sparkle in 2.0.0 iirc) + - [ ] Set the base remote url in the app to [kMFWebsiteAddress]/maindownload/ + +**Post-archive check** +- [ ] Make sure the app launches and works ok. +- [ ] Make sure the version numbers shown in the app are correct. + +**GitHub** + +- [ ] Write update notes + - Use git log for writing update notes: + - You can filter out autogenerated commits like this: + - `git log --perl-regexp --author="^(?!github-actions)"` + - If you want to preserve single linebreaks in update notes, use `\` at the end of the line + - In GitHub they are automatically preserved → Should make it so it's the same for updateNotes. pandocs `--wrap=preserve` doesn't work for me. + - Lists with several indentation levels look a little weird with the current css. Better to avoid them. + - (Or fix the CSS) Edit: fixed the CSS + - Links to issues of the form `#94` don't work. `[Normal markdown links](abcd)` do work though. + - Credit users like this: `@nghlt [on GitHub](https://github.com/nghlt)` + - Mentions of a `@user` don't work as links in in-app release notes but `[user](link)` won't make them show up as a contributor to the release in GitHub. + - TODO: Maybe support @user auto links in in-app release notes. + - When including images use `` to set size + - Setting no width is also okay + - Setting height explicitly will mess up aspect ratio + - Make sure to have free line above `- bulleted lists` and `## Headings` + - Otherwise it won't display properly in the Sparkle Update Window + - Make sure to include the version string at the top of the content because it looks better in Sparkle. See [2.2.0 release notes](https://github.com/noah-nuebling/mac-mouse-fix/releases/tag/2.2.0) +- [ ] Zip the .app before uploading. Name it 'MacMouseFixApp.zip' +- [ ] Also upload dSYMs.zip so you can symbolicate crash reports + - dSYMs folder is inside .xcarchive for the build which you can find from the Xcode Organizer. +- [ ] Push local changes after the final build - and before publishing the GH release! + - So that the GH release links to the correct source code commit with the right build number. +- [ ] Update appcasts: + - Checkout update-feed branch + - ((Pull new release tags)) Edit: ./update does that automatically now + - Run ./update + +**Update stuff** +- [ ] Update [redirection-service](https://github.com/noah-nuebling/redirection-service/blob/main/index.html) if necessary + - The redirection-service has an mmf2-latest link which needs to be updated, when we publish a new mmf2 version. + +**Other Places** (We don't reallyyy care about these sites, and other ppl update them for us.) +- [ ] x Update Mac Update Listing +- [ ] x Update Cnet Listing +- [ ] x Update alternativeto listing + +**Website** (Only relevant pre Sparkle - with Sparkle we don't need to update the Website at all) +/maindownload-app/: +* [ ] x Update 'updatenotes-app.zip' + - Update 'updatenotes-source/updatenotes-app/index.html' + - Run the 'updatenotes-source/install' script to zip stuff up and put in the right place +- [ ] x Update 'maindownload-app/bundleversion-app' +- [ ] x Update 'maindownload-app/MacMouseFixApp.zip' + +**Testing** + +- [ ] Test if version downloaded from GitHub download works properly +- [ ] Test on older macOS +- [ ] Test if updating from the previous version works properly + - Make sure the previous version has accessibility enabled and works properly before updating + - Make sure in-app update notes look correct + - Make sure the config is retained after update. + - Make sure the version numbers showed in the app are correct. diff --git a/Shared/Config/Config.m b/Shared/Config/Config.m index 59b304e0f..b0a144929 100644 --- a/Shared/Config/Config.m +++ b/Shared/Config/Config.m @@ -474,12 +474,12 @@ - (void)repairConfigWithReason:(MFConfigRepairReason)reason info:(id _Nullable)i } else if (currentVersion == 23) { /// 23 -> 24 - /// (24 might be used in the next release after 3.0.3) + /// (24 will be used in MMF 3.0.4 and later) [Feb 2025] DDLogInfo(@"repairConfig: Upgrading configVersion from 23 to 24..."); /// Delete legacy MFLicenseState cache values - /// MFLicense state cache will probably move to a dict at `License.licenseStateCache`, (and I've just added that dict in `default_config.plist`) but cache values aren't important enough to copy over to the new location, so we just delete the old values. + /// MFLicense state cache moved to a dict at `License.licenseStateCache`, (I've just added that dict in `default_config.plist`) but cache values aren't important enough to copy over to the new location, so we just delete the old values. /// (Writing this 18 Oct 2024, working on `hyperwork` branch. 3.0.3 is the latest release.) removeFromConfig(@"License.isLicensedCache"); removeFromConfig(@"License.licenseReasonCache");