From 08d55519e60301fd614489d4f1b065775c68a084 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Thu, 18 Dec 2025 20:27:30 -0700 Subject: [PATCH] chore: bump version to 1.1.4 --- BUILDING.md | 9 +++--- CHANGELOG.md | 11 +++++++ README.md | 14 --------- android/app/build.gradle | 4 +-- doc/ios-share-extension-improvements.md | 4 +-- doc/ios-share-extension-setup.md | 4 +-- doc/native-share-target-implementation.md | 4 +-- ...shared-image-plugin-implementation-plan.md | 4 +-- ios/App/App.xcodeproj/project.pbxproj | 29 +++++++++++++------ package-lock.json | 4 +-- package.json | 2 +- 11 files changed, 49 insertions(+), 40 deletions(-) diff --git a/BUILDING.md b/BUILDING.md index 42060c6f..9df8a05b 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -1120,6 +1120,7 @@ If you need to build manually or want to understand the individual steps: - Generate certificates inside XCode. - Right-click on App and under Signing & Capabilities set the Team. +- In the App Developer setup (eg. https://developer.apple.com/account), under Identifiers and/or "Certificates, Identifiers & Profiles" #### Each Release @@ -1136,10 +1137,10 @@ export GEM_HOME=$shortened_path export GEM_PATH=$shortened_path ``` -##### 1. Bump the version in package.json for `MARKETING_VERSION`, then `grep CURRENT_PROJECT_VERSION ios/App/App.xcodeproj/project.pbxproj` and add 1 for the numbered version; +##### 1. Bump the version in package.json & CHANGELOG.md for `MARKETING_VERSION`, then `grep CURRENT_PROJECT_VERSION ios/App/App.xcodeproj/project.pbxproj` and add 1 for the numbered version; ```bash -cd ios/App && xcrun agvtool new-version 48 && perl -p -i -e "s/MARKETING_VERSION = .*;/MARKETING_VERSION = 1.1.3;/g" App.xcodeproj/project.pbxproj && cd - +cd ios/App && xcrun agvtool new-version 49 && perl -p -i -e "s/MARKETING_VERSION = .*;/MARKETING_VERSION = 1.1.4;/g" App.xcodeproj/project.pbxproj && cd - # Unfortunately this edits Info.plist directly. #xcrun agvtool new-marketing-version 0.4.5 ``` @@ -1297,8 +1298,8 @@ The recommended way to build for Android is using the automated build script: ##### 1. Bump the version in package.json, then update these versions & run: ```bash -perl -p -i -e 's/versionCode .*/versionCode 48/g' android/app/build.gradle -perl -p -i -e 's/versionName .*/versionName "1.1.3"/g' android/app/build.gradle +perl -p -i -e 's/versionCode .*/versionCode 49/g' android/app/build.gradle +perl -p -i -e 's/versionName .*/versionName "1.1.4"/g' android/app/build.gradle ``` ##### 2. Build diff --git a/CHANGELOG.md b/CHANGELOG.md index 15c69b18..3096f759 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.1.4] - 2025.12.18 +### Fixed +- Contact notes & contact methods preserved in export +### Added +- This is a target for sharing +- Switch to a project or person in give-dialog pop-up +- Starred projects onto project-choice in give-dialog pop-up +### Changed +- Front page: 1 green "Thank" button + + ## [1.1.3] - 2025.11.19 ### Changed - Project selection in dialogs now reaches out to server when filtering diff --git a/README.md b/README.md index 661f2e26..dace396d 100644 --- a/README.md +++ b/README.md @@ -279,13 +279,11 @@ The application uses a platform-agnostic database layer with Vue mixins for serv * `src/services/PlatformServiceFactory.ts` - Platform-specific service factory * `src/services/AbsurdSqlDatabaseService.ts` - SQLite implementation * `src/utils/PlatformServiceMixin.ts` - Vue mixin for database access with caching -* `src/db/` - Legacy Dexie database (migration in progress) **Development Guidelines**: - Always use `PlatformServiceMixin` for database operations in components - Test with PlatformServiceMixin for new features -- Use migration tools for data transfer between systems - Leverage mixin's ultra-concise methods: `$db()`, `$exec()`, `$one()`, `$contacts()`, `$settings()` **Architecture Decision**: The project uses Vue mixins over Composition API composables for platform service access. See [Architecture Decisions](doc/architecture-decisions.md) for detailed rationale. @@ -305,21 +303,9 @@ timesafari/ └── 📄 doc/README-BUILD-GUARD.md # Guard system documentation ``` -## Known Issues - -### Critical Vue Reactivity Bug -A critical Vue reactivity bug was discovered during ActiveDid migration testing where component properties fail to trigger template updates correctly. - -**Impact**: The `newDirectOffersActivityNumber` element in HomeView.vue requires a watcher workaround to render correctly. - -**Status**: Workaround implemented, investigation ongoing. - -**Documentation**: See [Vue Reactivity Bug Report](doc/vue-reactivity-bug-report.md) for details. - ## 🤝 Contributing 1. **Follow the Build Architecture Guard** - Update BUILDING.md when modifying build files -2. **Use the PR template** - Complete the checklist for build-related changes 3. **Test your changes** - Ensure builds work on affected platforms 4. **Document updates** - Keep BUILDING.md current and accurate diff --git a/android/app/build.gradle b/android/app/build.gradle index f63c6945..8b449f52 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -31,8 +31,8 @@ android { applicationId "app.timesafari.app" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 48 - versionName "1.1.3" + versionCode 49 + versionName "1.1.4" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" aaptOptions { // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. diff --git a/doc/ios-share-extension-improvements.md b/doc/ios-share-extension-improvements.md index 6ef6e3cb..821ab263 100644 --- a/doc/ios-share-extension-improvements.md +++ b/doc/ios-share-extension-improvements.md @@ -29,7 +29,7 @@ import UniformTypeIdentifiers class ShareViewController: UIViewController { - private let appGroupIdentifier = "group.app.timesafari" + private let appGroupIdentifier = "group.app.timesafari.share" private let sharedPhotoBase64Key = "sharedPhotoBase64" private let sharedPhotoFileNameKey = "sharedPhotoFileName" @@ -155,7 +155,7 @@ private func openMainApp() { // In AppDelegate.swift func applicationDidBecomeActive(_ application: UIApplication) { - let appGroupIdentifier = "group.app.timesafari" + let appGroupIdentifier = "group.app.timesafari.share" guard let userDefaults = UserDefaults(suiteName: appGroupIdentifier) else { return } diff --git a/doc/ios-share-extension-setup.md b/doc/ios-share-extension-setup.md index 83f49007..84dfad33 100644 --- a/doc/ios-share-extension-setup.md +++ b/doc/ios-share-extension-setup.md @@ -42,7 +42,7 @@ App Groups allow the Share Extension and main app to share data. 3. Click **+ Capability** 4. Select **App Groups** 5. Click **+** to add a new group -6. Enter: `group.app.timesafari` +6. Enter: `group.app.timesafari.share` 7. Ensure it's checked/enabled ### For Share Extension Target: @@ -52,7 +52,7 @@ App Groups allow the Share Extension and main app to share data. 3. Click **+ Capability** 4. Select **App Groups** 5. Click **+** to add a new group -6. Enter: `group.app.timesafari` (same as main app) +6. Enter: `group.app.timesafari.share` (same as main app) 7. Ensure it's checked/enabled **Important:** Both targets must use the **exact same** App Group identifier. diff --git a/doc/native-share-target-implementation.md b/doc/native-share-target-implementation.md index 7a30979c..5168d6c5 100644 --- a/doc/native-share-target-implementation.md +++ b/doc/native-share-target-implementation.md @@ -119,7 +119,7 @@ class ShareViewController: SLComposeServiceViewController { let base64String = imageData.base64EncodedString() // Store in shared UserDefaults (accessible by main app) - let userDefaults = UserDefaults(suiteName: "group.app.timesafari") + let userDefaults = UserDefaults(suiteName: "group.app.timesafari.share") userDefaults?.set(base64String, forKey: "sharedPhotoBase64") userDefaults?.set(fileName ?? "shared-image.jpg", forKey: "sharedPhotoFileName") userDefaults?.synchronize() @@ -149,7 +149,7 @@ class ShareViewController: SLComposeServiceViewController { 1. In Xcode, select main app target → Signing & Capabilities 2. Add "App Groups" capability -3. Create group: `group.app.timesafari` +3. Create group: `group.app.timesafari.share` 4. Repeat for Share Extension target with same group name #### 1.5 Update Main App to Read from App Group diff --git a/doc/shared-image-plugin-implementation-plan.md b/doc/shared-image-plugin-implementation-plan.md index 2d9eb6e4..359ce402 100644 --- a/doc/shared-image-plugin-implementation-plan.md +++ b/doc/shared-image-plugin-implementation-plan.md @@ -78,7 +78,7 @@ import Capacitor @objc(SharedImagePlugin) public class SharedImagePlugin: CAPPlugin { - private let appGroupIdentifier = "group.app.timesafari" + private let appGroupIdentifier = "group.app.timesafari.share" @objc func getSharedImage(_ call: CAPPluginCall) { // Read from App Group UserDefaults @@ -504,7 +504,7 @@ If issues arise: ## Additional Notes ### iOS App Group: -- Current App Group ID: `group.app.timesafari` +- Current App Group ID: `group.app.timesafari.share` - Ensure plugin has access to same App Group - Share Extension already writes to this App Group diff --git a/ios/App/App.xcodeproj/project.pbxproj b/ios/App/App.xcodeproj/project.pbxproj index 7a672348..1fcfba79 100644 --- a/ios/App/App.xcodeproj/project.pbxproj +++ b/ios/App/App.xcodeproj/project.pbxproj @@ -74,7 +74,18 @@ /* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ /* Begin PBXFileSystemSynchronizedRootGroup section */ - C86585D62ED456DE00824752 /* TimeSafariShareExtension */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (C86585E32ED456DE00824752 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = TimeSafariShareExtension; sourceTree = ""; }; + C86585D62ED456DE00824752 /* TimeSafariShareExtension */ = { + isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + C86585E32ED456DE00824752 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, + ); + explicitFileTypes = { + }; + explicitFolders = ( + ); + path = TimeSafariShareExtension; + sourceTree = ""; + }; /* End PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFrameworksBuildPhase section */ @@ -513,7 +524,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = App/App.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 48; + CURRENT_PROJECT_VERSION = 49; DEVELOPMENT_TEAM = GM3FS5JQPH; ENABLE_APP_SANDBOX = NO; ENABLE_USER_SCRIPT_SANDBOXING = NO; @@ -523,7 +534,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.1.3; + MARKETING_VERSION = 1.1.4; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\""; PRODUCT_BUNDLE_IDENTIFIER = app.timesafari; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -541,7 +552,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = App/App.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 48; + CURRENT_PROJECT_VERSION = 49; DEVELOPMENT_TEAM = GM3FS5JQPH; ENABLE_APP_SANDBOX = NO; ENABLE_USER_SCRIPT_SANDBOXING = NO; @@ -551,7 +562,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.1.3; + MARKETING_VERSION = 1.1.4; PRODUCT_BUNDLE_IDENTIFIER = app.timesafari; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = ""; @@ -569,7 +580,7 @@ CLANG_ENABLE_OBJC_WEAK = YES; CODE_SIGN_ENTITLEMENTS = TimeSafariShareExtension/TimeSafariShareExtension.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 49; DEVELOPMENT_TEAM = GM3FS5JQPH; GCC_C_LANGUAGE_STANDARD = gnu17; GENERATE_INFOPLIST_FILE = YES; @@ -583,7 +594,7 @@ "@executable_path/../../Frameworks", ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 1.1.4; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = app.timesafari.TimeSafariShareExtension; @@ -607,7 +618,7 @@ CLANG_ENABLE_OBJC_WEAK = YES; CODE_SIGN_ENTITLEMENTS = TimeSafariShareExtension/TimeSafariShareExtension.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 49; DEVELOPMENT_TEAM = GM3FS5JQPH; GCC_C_LANGUAGE_STANDARD = gnu17; GENERATE_INFOPLIST_FILE = YES; @@ -621,7 +632,7 @@ "@executable_path/../../Frameworks", ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 1.1.4; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = app.timesafari.TimeSafariShareExtension; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/package-lock.json b/package-lock.json index 1cc55bd6..5a8aae0f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "timesafari", - "version": "1.1.4-beta", + "version": "1.1.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "timesafari", - "version": "1.1.4-beta", + "version": "1.1.4", "dependencies": { "@capacitor-community/electron": "^5.0.1", "@capacitor-community/sqlite": "6.0.2", diff --git a/package.json b/package.json index ff8051ac..6e3c3b9d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "timesafari", - "version": "1.1.4-beta", + "version": "1.1.4", "description": "Time Safari Application", "author": { "name": "Time Safari Team"