Versión 1.7.0 (build 89): release notes iPhone Duo y DUO_STATUS

- MARKETING_VERSION 1.7.0 / CURRENT_PROJECT_VERSION 89 en todos los targets.
- Release notes en-US/en-GB/en-AU/en-CA y es-ES/es-MX con iPhone Duo como
  primer bullet; RELEASE_NOTES.md y CHANGELOG.md.
- DUO_STATUS.md: qué se adaptó, escenarios regular×regular, pendiente fase 2
  (Xcode 27.1) y cómo probarlo.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F1u4K16xy7eQVtgsYNZ9Vn
This commit is contained in:
alexandrev-tibco
2026-09-16 15:13:10 +02:00
parent 171023a411
commit 8828a2aa0f
10 changed files with 188 additions and 82 deletions
+16
View File
@@ -2,6 +2,22 @@
All notable changes to Portfolio Journal will be documented in this file. All notable changes to Portfolio Journal will be documented in this file.
## [1.7.0] — iOS 27 + iPhone Duo (phase 1)
### Added
- **iPhone Duo / regular width**: single adaptive `TabView` (sidebar-adaptable on iOS 18+) — no more layout swap between iPhone and iPad hierarchies, so navigation state survives opening/closing the Duo.
- **Sources** and **Journal** use `NavigationSplitView` (list + detail side by side in regular width, collapsing stack in compact).
- **Quick Update** opens as an inspector panel next to the dashboard in regular width (sheet in compact).
- **Charts**: plots get 35% more height in regular width via `chartHeightScale`; bottom safe area respected.
- **Biometrics**: Face ID / Touch ID / Optic ID resolved from `LAContext.biometryType`; all lock/privacy strings are generic (7 languages).
- `@SceneStorage` restore of the selected tab.
- What's New entry for 1.7.0.
### Changed
- Compiles cleanly with Xcode 27 / SDK 27: missing `CoreData` imports (MemberImportVisibility), main-actor isolation warnings, `IsolatedDefaultValues` upcoming feature.
- Migrated soft-deprecated SwiftUI API: `foregroundColor``foregroundStyle`, `cornerRadius``clipShape`, `navigationBarLeading/Trailing``topBarLeading/Trailing`, `Task.sleep(nanoseconds:)``sleep(for:)`, `NavigationLink(isActive:)``navigationDestination(isPresented:)`.
- Liquid Glass (`glassEffect`) for the Journal floating month labels on iOS 26+, material fallback below.
## [Unreleased] ## [Unreleased]
### Fixed ### Fixed
+94
View File
@@ -0,0 +1,94 @@
# iPhone Duo — estado de la adaptación (Portfolio Journal 1.7.0)
Fase 1, hecha con Xcode 27.0 / SDK iOS 27.0 (sin las APIs específicas de Duo de
Xcode 27.1). Todo lo que se describe aquí funciona con size classes estándar:
| Pantalla Duo | Size class | Cómo se comporta la app |
|---|---|---|
| Exterior 5.4" (vertical) | compact × regular | Igual que un iPhone: tab bar, stacks |
| Exterior (horizontal) | compact × compact | Igual que un iPhone en horizontal |
| Interior 7.6" (ambas orientaciones) | regular × regular | Layouts de dos columnas, sidebar/tab bar superior, inspector |
## Qué se ha adaptado
### Navegación (ContentView)
- Un único `TabView` para todas las size classes. En iOS 18+ usa
`.tabViewStyle(.sidebarAdaptable)`: tab bar en compacto, tab bar superior /
sidebar en regular. Antes había dos jerarquías (`TabView` iPhone /
`NavigationSplitView` iPad) y el cambio de size class las intercambiaba,
perdiendo el estado; ahora abrir/cerrar el Duo conserva cada pestaña.
- `@SceneStorage("selectedTab")` restaura la pestaña por escena.
- Ningún `userInterfaceIdiom`, `UIScreen.main`, ni orientación: todo por
`@Environment(\.horizontalSizeClass)`.
### Escenarios regular×regular (pantalla interior)
1. **Fuentes**: `NavigationSplitView` — lista de posiciones a la izquierda y
detalle (rendimiento, gráfico, snapshots) a la derecha, a la vez. En
compacto colapsa a stack; la selección es el único estado de navegación, así
sobrevive al plegado.
2. **Diario**: `NavigationSplitView` — lista de meses + check-in mensual inline.
3. **Dashboard + Quick Update**: el check-in rápido se abre como `.inspector`
(panel lateral) en ancho regular, de modo que los gráficos del dashboard
siguen visibles mientras se teclean los valores; en compacto es un sheet.
El dashboard usa masonry de 2/3 columnas según el ancho disponible
(`GeometryReader`), que se recalcula al abrir/cerrar el inspector.
4. **Gráficos**: sidebar de tipos de gráfico (248 pt) + área de gráfico a todo
el ancho, cabecera KPI y selector de periodo segmentado. Nuevo
`chartHeightScale` (+35 % de alto en regular) para que el ancho extra se
traduzca en más área de trazado; las etiquetas de eje ya eran más densas en
regular.
5. **Bloqueo / privacidad**: `LAContext.biometryType` → "Desbloquear con
Face ID / Touch ID / Optic ID"; icono y textos genéricos en 7 idiomas.
### Reglas de Apple aplicadas
- Layout por size classes (regla 1), sin `UIScreen.main` (2), sin tamaños de
pantalla fijos (3): las columnas usan `navigationSplitViewColumnWidth(min:ideal:max:)`
e `inspectorColumnWidth`, y el contenido `maxWidth: .infinity`.
- Navegación nativa: `TabView` sidebarAdaptable, `NavigationSplitView`,
`.inspector`, sheets/popovers/alerts del sistema (4, 11).
- Safe areas: se eliminó el `ignoresSafeArea(edges: .bottom)` del contenido
interactivo de Gráficos; solo fondos decorativos (`AppBackground`) ignoran el
safe area (5).
- Orientaciones: iPhone vertical + horizontal, iPad las 4; sin
`UIRequiresFullScreen`; `UIApplicationSupportsMultipleScenes = YES` (6).
- Biometría por `biometryType` (7).
- Estado persistente ante redimensionado: sin intercambio de jerarquías,
`@SceneStorage`, ViewModels en `@StateObject` que sobreviven al cambio de
size class (9).
- Liquid Glass: barras del sistema automáticas al compilar con SDK 27;
`glassEffect` en las etiquetas flotantes del Diario (iOS 26+, fallback
material).
### Esquinas concéntricas (regla 8)
No aplicada: ninguna tarjeta llega a sangre hasta la esquina de pantalla (todo
va con padding dentro de `ScrollView`/`List`). Revisar en fase 2 si el
edge-to-edge de 27.1 cambia esto.
## Qué queda para la fase 2 (Xcode 27.1)
- `ArrangementView` / `ReservedRegion`: llegar al borde de la pantalla interior y
respetar la región reservada (botones del sistema en Split View).
- Probar en el simulador Duo (Device Hub) el plegado en caliente: comprobar que
el inspector de Quick Update y las columnas de Fuentes/Diario se recomponen
sin perder el texto tecleado.
- Skill "App Resizability" y release notes con el edge-to-edge.
- Traducir `fastlane/metadata/{de-DE,fr-*,it,ja,pt-*}/release_notes.txt`
(solo en-* y es-* están actualizados).
- Widgets: verificar tamaños en la pantalla interior cuando exista simulador.
## Cómo probarlo
```bash
# Build (un simulador cada vez)
xcodebuild -project PortfolioJournal.xcodeproj -scheme PortfolioJournal \
-destination 'platform=iOS Simulator,name=iPad mini (A17 Pro)' build
# Recorrido con capturas (compacto vs regular×regular)
xcodebuild test -project PortfolioJournal.xcodeproj -scheme PortfolioJournal \
-destination 'platform=iOS Simulator,name=iPhone 17 Pro' \
-only-testing:PortfolioJournalUITests/DuoLayoutUITests -resultBundlePath /tmp/duo-iphone.xcresult
xcodebuild test ... -destination 'platform=iOS Simulator,name=iPad mini (A17 Pro)' \
-only-testing:PortfolioJournalUITests/DuoLayoutUITests -resultBundlePath /tmp/duo-ipad.xcresult
xcrun xcresulttool export attachments --path /tmp/duo-ipad.xcresult --output-path /tmp/duo-ipad-png
```
La app arranca con datos de ejemplo y sin onboarding con el argumento
`--screenshots`. iPad mini (A17 Pro) es el simulador más parecido a la pantalla
interior del Duo (regular×regular en ambas orientaciones).
+28 -28
View File
@@ -744,7 +744,7 @@
CODE_SIGN_ENTITLEMENTS = PortfolioJournal/PortfolioJournalDebug.entitlements; CODE_SIGN_ENTITLEMENTS = PortfolioJournal/PortfolioJournalDebug.entitlements;
ENABLE_USER_SCRIPT_SANDBOXING = NO; ENABLE_USER_SCRIPT_SANDBOXING = NO;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 88; CURRENT_PROJECT_VERSION = 89;
DEVELOPMENT_ASSET_PATHS = PortfolioJournal/Assets.xcassets; DEVELOPMENT_ASSET_PATHS = PortfolioJournal/Assets.xcassets;
DEVELOPMENT_TEAM = 2825Q76T7H; DEVELOPMENT_TEAM = 2825Q76T7H;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
@@ -762,7 +762,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.6.3; MARKETING_VERSION = 1.7.0;
PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournal; PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournal;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = YES; STRING_CATALOG_GENERATE_SYMBOLS = YES;
@@ -786,7 +786,7 @@
CODE_SIGN_IDENTITY = "Apple Distribution"; CODE_SIGN_IDENTITY = "Apple Distribution";
CODE_SIGN_STYLE = Manual; CODE_SIGN_STYLE = Manual;
PROVISIONING_PROFILE_SPECIFIER = "porfoliojournal"; PROVISIONING_PROFILE_SPECIFIER = "porfoliojournal";
CURRENT_PROJECT_VERSION = 88; CURRENT_PROJECT_VERSION = 89;
DEVELOPMENT_ASSET_PATHS = PortfolioJournal/Assets.xcassets; DEVELOPMENT_ASSET_PATHS = PortfolioJournal/Assets.xcassets;
DEVELOPMENT_TEAM = 2825Q76T7H; DEVELOPMENT_TEAM = 2825Q76T7H;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
@@ -804,7 +804,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.6.3; MARKETING_VERSION = 1.7.0;
PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournal; PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournal;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = YES; STRING_CATALOG_GENERATE_SYMBOLS = YES;
@@ -944,7 +944,7 @@
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
CODE_SIGN_ENTITLEMENTS = PortfolioJournalWidgetExtension.entitlements; CODE_SIGN_ENTITLEMENTS = PortfolioJournalWidgetExtension.entitlements;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 88; CURRENT_PROJECT_VERSION = 89;
DEVELOPMENT_ASSET_PATHS = PortfolioJournalWidget/Assets.xcassets; DEVELOPMENT_ASSET_PATHS = PortfolioJournalWidget/Assets.xcassets;
DEVELOPMENT_TEAM = 2825Q76T7H; DEVELOPMENT_TEAM = 2825Q76T7H;
GENERATE_INFOPLIST_FILE = NO; GENERATE_INFOPLIST_FILE = NO;
@@ -957,7 +957,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.6.3; MARKETING_VERSION = 1.7.0;
PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournal.PortfolioJournalWidget; PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournal.PortfolioJournalWidget;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES; SKIP_INSTALL = YES;
@@ -979,7 +979,7 @@
CODE_SIGN_IDENTITY = "Apple Distribution"; CODE_SIGN_IDENTITY = "Apple Distribution";
CODE_SIGN_STYLE = Manual; CODE_SIGN_STYLE = Manual;
PROVISIONING_PROFILE_SPECIFIER = "Portfolio Journalwidget"; PROVISIONING_PROFILE_SPECIFIER = "Portfolio Journalwidget";
CURRENT_PROJECT_VERSION = 88; CURRENT_PROJECT_VERSION = 89;
DEVELOPMENT_ASSET_PATHS = PortfolioJournalWidget/Assets.xcassets; DEVELOPMENT_ASSET_PATHS = PortfolioJournalWidget/Assets.xcassets;
DEVELOPMENT_TEAM = 2825Q76T7H; DEVELOPMENT_TEAM = 2825Q76T7H;
GENERATE_INFOPLIST_FILE = NO; GENERATE_INFOPLIST_FILE = NO;
@@ -992,7 +992,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.6.3; MARKETING_VERSION = 1.7.0;
PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournal.PortfolioJournalWidget; PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournal.PortfolioJournalWidget;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES; SKIP_INSTALL = YES;
@@ -1010,7 +1010,7 @@
buildSettings = { buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)"; BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 88; CURRENT_PROJECT_VERSION = 89;
DEVELOPMENT_TEAM = 2825Q76T7H; DEVELOPMENT_TEAM = 2825Q76T7H;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 17.6; IPHONEOS_DEPLOYMENT_TARGET = 17.6;
@@ -1019,7 +1019,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@loader_path/Frameworks", "@loader_path/Frameworks",
); );
MARKETING_VERSION = 1.6.3; MARKETING_VERSION = 1.7.0;
PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournalTests; PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournalTests;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_EMIT_LOC_STRINGS = NO;
@@ -1034,7 +1034,7 @@
buildSettings = { buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)"; BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 88; CURRENT_PROJECT_VERSION = 89;
DEVELOPMENT_TEAM = 2825Q76T7H; DEVELOPMENT_TEAM = 2825Q76T7H;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 17.6; IPHONEOS_DEPLOYMENT_TARGET = 17.6;
@@ -1043,7 +1043,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@loader_path/Frameworks", "@loader_path/Frameworks",
); );
MARKETING_VERSION = 1.6.3; MARKETING_VERSION = 1.7.0;
PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournalTests; PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournalTests;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_EMIT_LOC_STRINGS = NO;
@@ -1057,7 +1057,7 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 88; CURRENT_PROJECT_VERSION = 89;
DEVELOPMENT_TEAM = 2825Q76T7H; DEVELOPMENT_TEAM = 2825Q76T7H;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 17.6; IPHONEOS_DEPLOYMENT_TARGET = 17.6;
@@ -1066,7 +1066,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@loader_path/Frameworks", "@loader_path/Frameworks",
); );
MARKETING_VERSION = 1.6.3; MARKETING_VERSION = 1.7.0;
PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournalUITests; PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournalUITests;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_EMIT_LOC_STRINGS = NO;
@@ -1080,7 +1080,7 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 88; CURRENT_PROJECT_VERSION = 89;
DEVELOPMENT_TEAM = 2825Q76T7H; DEVELOPMENT_TEAM = 2825Q76T7H;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 17.6; IPHONEOS_DEPLOYMENT_TARGET = 17.6;
@@ -1089,7 +1089,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@loader_path/Frameworks", "@loader_path/Frameworks",
); );
MARKETING_VERSION = 1.6.3; MARKETING_VERSION = 1.7.0;
PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournalUITests; PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournalUITests;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_EMIT_LOC_STRINGS = NO;
@@ -1104,7 +1104,7 @@
buildSettings = { buildSettings = {
CODE_SIGN_ENTITLEMENTS = PortfolioJournalQuickUpdateExtension.entitlements; CODE_SIGN_ENTITLEMENTS = PortfolioJournalQuickUpdateExtension.entitlements;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 88; CURRENT_PROJECT_VERSION = 89;
DEVELOPMENT_TEAM = 2825Q76T7H; DEVELOPMENT_TEAM = 2825Q76T7H;
GENERATE_INFOPLIST_FILE = NO; GENERATE_INFOPLIST_FILE = NO;
INFOPLIST_FILE = PortfolioJournalQuickUpdate/Info.plist; INFOPLIST_FILE = PortfolioJournalQuickUpdate/Info.plist;
@@ -1116,7 +1116,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.6.3; MARKETING_VERSION = 1.7.0;
PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournal.QuickUpdate; PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournal.QuickUpdate;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES; SKIP_INSTALL = YES;
@@ -1132,7 +1132,7 @@
CODE_SIGN_ENTITLEMENTS = PortfolioJournalQuickUpdateExtension.entitlements; CODE_SIGN_ENTITLEMENTS = PortfolioJournalQuickUpdateExtension.entitlements;
CODE_SIGN_IDENTITY = "Apple Distribution"; CODE_SIGN_IDENTITY = "Apple Distribution";
CODE_SIGN_STYLE = Manual; CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 88; CURRENT_PROJECT_VERSION = 89;
DEVELOPMENT_TEAM = 2825Q76T7H; DEVELOPMENT_TEAM = 2825Q76T7H;
PROVISIONING_PROFILE_SPECIFIER = "PortfolioJournal QuickUpdate AppStore"; PROVISIONING_PROFILE_SPECIFIER = "PortfolioJournal QuickUpdate AppStore";
GENERATE_INFOPLIST_FILE = NO; GENERATE_INFOPLIST_FILE = NO;
@@ -1145,7 +1145,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.6.3; MARKETING_VERSION = 1.7.0;
PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournal.QuickUpdate; PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournal.QuickUpdate;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES; SKIP_INSTALL = YES;
@@ -1164,7 +1164,7 @@
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = PortfolioJournalWatch.entitlements; CODE_SIGN_ENTITLEMENTS = PortfolioJournalWatch.entitlements;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 88; CURRENT_PROJECT_VERSION = 89;
DEVELOPMENT_TEAM = 2825Q76T7H; DEVELOPMENT_TEAM = 2825Q76T7H;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = NO; GENERATE_INFOPLIST_FILE = NO;
@@ -1174,7 +1174,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.6.3; MARKETING_VERSION = 1.7.0;
PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournal.watchkitapp; PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournal.watchkitapp;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos; SDKROOT = watchos;
@@ -1200,7 +1200,7 @@
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = PortfolioJournalWatch.entitlements; CODE_SIGN_ENTITLEMENTS = PortfolioJournalWatch.entitlements;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 88; CURRENT_PROJECT_VERSION = 89;
DEVELOPMENT_TEAM = 2825Q76T7H; DEVELOPMENT_TEAM = 2825Q76T7H;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = NO; GENERATE_INFOPLIST_FILE = NO;
@@ -1210,7 +1210,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.6.3; MARKETING_VERSION = 1.7.0;
PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournal.watchkitapp; PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournal.watchkitapp;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos; SDKROOT = watchos;
@@ -1234,7 +1234,7 @@
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = PortfolioJournalWatchWidget.entitlements; CODE_SIGN_ENTITLEMENTS = PortfolioJournalWatchWidget.entitlements;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 88; CURRENT_PROJECT_VERSION = 89;
DEVELOPMENT_TEAM = 2825Q76T7H; DEVELOPMENT_TEAM = 2825Q76T7H;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = NO; GENERATE_INFOPLIST_FILE = NO;
@@ -1244,7 +1244,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.6.3; MARKETING_VERSION = 1.7.0;
PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournal.watchkitapp.widget; PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournal.watchkitapp.widget;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos; SDKROOT = watchos;
@@ -1269,7 +1269,7 @@
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = PortfolioJournalWatchWidget.entitlements; CODE_SIGN_ENTITLEMENTS = PortfolioJournalWatchWidget.entitlements;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 88; CURRENT_PROJECT_VERSION = 89;
DEVELOPMENT_TEAM = 2825Q76T7H; DEVELOPMENT_TEAM = 2825Q76T7H;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = NO; GENERATE_INFOPLIST_FILE = NO;
@@ -1279,7 +1279,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.6.3; MARKETING_VERSION = 1.7.0;
PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournal.watchkitapp.widget; PRODUCT_BUNDLE_IDENTIFIER = com.alexandrevazquez.PortfolioJournal.watchkitapp.widget;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos; SDKROOT = watchos;
+20
View File
@@ -0,0 +1,20 @@
# Release notes — 1.7.0 (build 89)
## en-US
📱 Ready for iPhone Duo: on the inner screen, Sources and Journal show the list and the detail side by side, Charts gain a sidebar with taller, wider plots, and your place is kept when you open or close the phone. Quick Update opens in a side panel next to your dashboard.
• Built for iOS 27 with the new Liquid Glass tab bar and toolbars.
• Face ID, Touch ID or Optic ID: App Lock and balance privacy now use whichever biometrics your device has.
• Layout adapts to any window size, Split View and Stage Manager.
• Bug fixes and performance improvements.
## es-ES
📱 Preparada para iPhone Duo: en la pantalla interior, Fuentes y Diario muestran lista y detalle a la vez, Gráficos gana una barra lateral con gráficos más altos y anchos, y no pierdes el sitio al abrir o cerrar el teléfono. La actualización rápida se abre en un panel lateral junto al panel principal.
• Compilada para iOS 27 con la nueva barra de pestañas y toolbars Liquid Glass.
• Face ID, Touch ID u Optic ID: el bloqueo de la app y la privacidad de saldos usan la biometría que tenga tu dispositivo.
• La interfaz se adapta a cualquier tamaño de ventana, Split View y Stage Manager.
• Correcciones de errores y mejoras de rendimiento.
Los ficheros que sube fastlane están en `fastlane/metadata/<locale>/release_notes.txt`
(en-US, en-GB, en-AU, en-CA, es-ES, es-MX actualizados; de-DE, fr-*, it, ja, pt-* pendientes de traducir).
+5 -9
View File
@@ -1,9 +1,5 @@
New charts, quick updates and portfolio insights: 📱 Ready for iPhone Duo: on the inner screen, Sources and Journal show the list and the detail side by side, Charts gain a sidebar with taller, wider plots, and your place is kept when you open or close the phone. Quick Update opens in a side panel next to your dashboard.
• Built for iOS 27 with the new Liquid Glass tab bar and toolbars.
Quick Update — add snapshots to all your sources at once from the Dashboard Face ID, Touch ID or Optic ID: App Lock and balance privacy now use whichever biometrics your device has.
Portfolio Insights — smart observations about your portfolio (streak, gains, milestones, forecasts) Layout adapts to any window size, Split View and Stage Manager.
3 new Premium charts: Compare Sources, What If Simulator, Period vs Period Bug fixes and performance improvements.
• Monthly contribution — set a default contribution per source, apply retroactively
• Streak badge — see your consecutive months tracking streak on the Dashboard
• Smarter notifications — check-in reminders skip months you have already completed; milestone alerts when your portfolio crosses round numbers
• Bug fixes and performance improvements
+5 -9
View File
@@ -1,9 +1,5 @@
New charts, quick updates and portfolio insights: 📱 Ready for iPhone Duo: on the inner screen, Sources and Journal show the list and the detail side by side, Charts gain a sidebar with taller, wider plots, and your place is kept when you open or close the phone. Quick Update opens in a side panel next to your dashboard.
• Built for iOS 27 with the new Liquid Glass tab bar and toolbars.
Quick Update — add snapshots to all your sources at once from the Dashboard Face ID, Touch ID or Optic ID: App Lock and balance privacy now use whichever biometrics your device has.
Portfolio Insights — smart observations about your portfolio (streak, gains, milestones, forecasts) Layout adapts to any window size, Split View and Stage Manager.
3 new Premium charts: Compare Sources, What If Simulator, Period vs Period Bug fixes and performance improvements.
• Monthly contribution — set a default contribution per source, apply retroactively
• Streak badge — see your consecutive months tracking streak on the Dashboard
• Smarter notifications — check-in reminders skip months you have already completed; milestone alerts when your portfolio crosses round numbers
• Bug fixes and performance improvements
+5 -9
View File
@@ -1,9 +1,5 @@
New charts, quick updates and portfolio insights: 📱 Ready for iPhone Duo: on the inner screen, Sources and Journal show the list and the detail side by side, Charts gain a sidebar with taller, wider plots, and your place is kept when you open or close the phone. Quick Update opens in a side panel next to your dashboard.
• Built for iOS 27 with the new Liquid Glass tab bar and toolbars.
Quick Update — add snapshots to all your sources at once from the Dashboard Face ID, Touch ID or Optic ID: App Lock and balance privacy now use whichever biometrics your device has.
Portfolio Insights — smart observations about your portfolio (streak, gains, milestones, forecasts) Layout adapts to any window size, Split View and Stage Manager.
3 new Premium charts: Compare Sources, What If Simulator, Period vs Period Bug fixes and performance improvements.
• Monthly contribution — set a default contribution per source, apply retroactively
• Streak badge — see your consecutive months tracking streak on the Dashboard
• Smarter notifications — check-in reminders skip months you have already completed; milestone alerts when your portfolio crosses round numbers
• Bug fixes and performance improvements
+5 -9
View File
@@ -1,9 +1,5 @@
New charts, quick updates and portfolio insights: 📱 Ready for iPhone Duo: on the inner screen, Sources and Journal show the list and the detail side by side, Charts gain a sidebar with taller, wider plots, and your place is kept when you open or close the phone. Quick Update opens in a side panel next to your dashboard.
• Built for iOS 27 with the new Liquid Glass tab bar and toolbars.
Quick Update — add snapshots to all your sources at once from the Dashboard Face ID, Touch ID or Optic ID: App Lock and balance privacy now use whichever biometrics your device has.
Portfolio Insights — smart observations about your portfolio (streak, gains, milestones, forecasts) Layout adapts to any window size, Split View and Stage Manager.
3 new Premium charts: Compare Sources, What If Simulator, Period vs Period Bug fixes and performance improvements.
• Monthly contribution — set a default contribution per source, apply retroactively
• Streak badge — see your consecutive months tracking streak on the Dashboard
• Smarter notifications — check-in reminders skip months you have already completed; milestone alerts when your portfolio crosses round numbers
• Bug fixes and performance improvements
+5 -9
View File
@@ -1,9 +1,5 @@
Nuevos gráficos, actualizaciones rápidas e insights de cartera: 📱 Preparada para iPhone Duo: en la pantalla interior, Fuentes y Diario muestran lista y detalle a la vez, Gráficos gana una barra lateral con gráficos más altos y anchos, y no pierdes el sitio al abrir o cerrar el teléfono. La actualización rápida se abre en un panel lateral junto al panel principal.
• Compilada para iOS 27 con la nueva barra de pestañas y toolbars Liquid Glass.
Actualización rápida — añade snapshots a todas tus fuentes de una vez desde el Dashboard Face ID, Touch ID u Optic ID: el bloqueo de la app y la privacidad de saldos usan la biometría que tenga tu dispositivo.
Insights de cartera — observaciones inteligentes sobre tu cartera (racha, ganancias, hitos, previsiones) La interfaz se adapta a cualquier tamaño de ventana, Split View y Stage Manager.
3 nuevos gráficos Premium: Comparar Fuentes, Simulador ¿Y si...?, Período vs Período Correcciones de errores y mejoras de rendimiento.
• Contribución mensual — configura una contribución predeterminada por fuente, aplícala retroactivamente
• Racha — visualiza tu racha de meses consecutivos de seguimiento en el Dashboard
• Notificaciones más inteligentes — los recordatorios saltan meses ya completados; alertas al cruzar hitos redondos
• Correcciones de errores y mejoras de rendimiento
+5 -9
View File
@@ -1,9 +1,5 @@
Nuevos gráficos, actualizaciones rápidas e insights de cartera: 📱 Preparada para iPhone Duo: en la pantalla interior, Fuentes y Diario muestran lista y detalle a la vez, Gráficos gana una barra lateral con gráficos más altos y anchos, y no pierdes el sitio al abrir o cerrar el teléfono. La actualización rápida se abre en un panel lateral junto al panel principal.
• Compilada para iOS 27 con la nueva barra de pestañas y toolbars Liquid Glass.
Actualización rápida — añade snapshots a todas tus fuentes de una vez desde el Dashboard Face ID, Touch ID u Optic ID: el bloqueo de la app y la privacidad de saldos usan la biometría que tenga tu dispositivo.
Insights de cartera — observaciones inteligentes sobre tu cartera (racha, ganancias, hitos, previsiones) La interfaz se adapta a cualquier tamaño de ventana, Split View y Stage Manager.
3 nuevos gráficos Premium: Comparar Fuentes, Simulador ¿Y si...?, Período vs Período Correcciones de errores y mejoras de rendimiento.
• Contribución mensual — configura una contribución predeterminada por fuente, aplícala retroactivamente
• Racha — visualiza tu racha de meses consecutivos de seguimiento en el Dashboard
• Notificaciones más inteligentes — los recordatorios saltan meses ya completados; alertas al cruzar hitos redondos
• Correcciones de errores y mejoras de rendimiento