diff --git a/.gitignore b/.gitignore
index 4d9e4b52..f100695a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -53,5 +53,4 @@ build_logs/
android/app/src/main/assets/public
android/app/src/main/res
-android/.gradle/buildOutputCleanup/buildOutputCleanup.lock
-android/.gradle/file-system.probe
+
diff --git a/BUILDING.md b/BUILDING.md
index ad7b1d41..b7a02db0 100644
--- a/BUILDING.md
+++ b/BUILDING.md
@@ -337,6 +337,8 @@ Prerequisites: macOS with Xcode installed
npx cap sync ios
```
+ - If that fails with "Could not find..." then look at the "gem_path" instructions above.
+
3. Copy the assets:
```bash
@@ -344,20 +346,38 @@ Prerequisites: macOS with Xcode installed
npx capacitor-assets generate --ios
```
-3. Open the project in Xcode:
+4. Bump the version to match Android
+
+ ```
+ cd ios/App
+ xcrun agvtool new-version 15
+ # Unfortunately this edits Info.plist directly.
+ #xcrun agvtool new-marketing-version 0.4.5
+ cat App.xcodeproj/project.pbxproj | sed "s/MARKETING_VERSION = .*;/MARKETING_VERSION = 0.4.5;/g" > temp
+ mv temp App.xcodeproj/project.pbxproj
+ cd -
+ ```
+
+5. Open the project in Xcode:
```bash
npx cap open ios
```
-4. Use Xcode to build and run on simulator or device.
+6. Use Xcode to build and run on simulator or device.
-5. Release
+7. Release
* Under "General" renamed a bunch of things to "Time Safari"
- * Choose Product -> Destination -> Any iOS
- * Choose Product -> Archive (which will trigger a build and take time, and "login" keychain password is machine user login, repeatedly)
- * Click Distribute
+ * Choose Product -> Destination -> Build Any iOS
+ * Choose Product -> Archive
+ * This will trigger a build and take time, needing user's "login" keychain password which is just their login password, repeatedly.
+ * If it fails with `building for 'iOS', but linking in dylib (.../.pkgx/zlib.net/v1.3.0/lib/libz.1.3.dylib) built for 'macOS'` then run XCode outside that terminal (ie. not with `npx cap open ios`).
+ * Click Distribute -> App Store Connect
+ * In AppStoreConnect, add the build to the distribution: remove the current build with the "-" when you hover over it, then "Add Build" with the new build.
+ * It can take 15 minutes for the build to show up in the list of builds.
+ * You'll probably have to "Manage" something about encryption, disallowed in France.
+ * Then "Save" and "Add to Review" and "Resubmit to App Review".
#### First-time iOS Configuration
@@ -393,13 +413,15 @@ Prerequisites: Android Studio with SDK installed
npx capacitor-assets generate --android
```
-4. Open the project in Android Studio:
+4. Bump version to match iOS, in android/app/build.gradleq
+
+5. Open the project in Android Studio:
```bash
npx cap open android
```
-5. Use Android Studio to build and run on emulator or device.
+6. Use Android Studio to build and run on emulator or device.
## Android Build from the console
@@ -429,6 +451,12 @@ Prerequisites: Android Studio with SDK installed
... and find your `aab` file at app/build/outputs/bundle/release
+At play.google.com/console:
+
+- Create new release, upload, hit Next.
+
+- Save & send changes for review.
+
## First-time Android Configuration for deep links
diff --git a/README.md b/README.md
index 9f3f2bd1..f8d6ca21 100644
--- a/README.md
+++ b/README.md
@@ -31,7 +31,9 @@ See [TESTING.md](test-playwright/TESTING.md) for detailed test instructions.
## Icons
-To add an icon, add to main.ts and reference with `fa` element and `icon` attribute with the hyphenated name.
+Application icons are in the `assets` directory, processed by the `capacitor-assets` command.
+
+To add a Font Awesome icon, add to main.ts and reference with `font-awesome` element and `icon` attribute with the hyphenated name.
## Other
diff --git a/android/.gitignore b/android/.gitignore
index acab7f87..680ed864 100644
--- a/android/.gitignore
+++ b/android/.gitignore
@@ -1,5 +1,17 @@
# Using Android gitignore template: https://github.com/github/gitignore/blob/HEAD/Android.gitignore
+app/build/*
+!app/build/.npmkeep
+
+# Copied web assets
+app/src/main/assets/public
+
+# Generated Config files
+app/src/main/assets/capacitor.config.json
+app/src/main/assets/capacitor.plugins.json
+app/src/main/res/xml/config.xml
+
+# secrets
app/gradle.properties.secrets
app/time-safari-upload-key-pkcs12.jks
@@ -94,11 +106,3 @@ lint/tmp/
# Cordova plugins for Capacitor
capacitor-cordova-android-plugins
-
-# Copied web assets
-app/src/main/assets/public
-
-# Generated Config files
-app/src/main/assets/capacitor.config.json
-app/src/main/assets/capacitor.plugins.json
-app/src/main/res/xml/config.xml
diff --git a/android/.gradle/buildOutputCleanup/cache.properties b/android/.gradle/buildOutputCleanup/cache.properties
deleted file mode 100644
index 55624b6e..00000000
--- a/android/.gradle/buildOutputCleanup/cache.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Wed Apr 09 09:01:13 UTC 2025
-gradle.version=8.11.1
diff --git a/android/.gradle/file-system.probe b/android/.gradle/file-system.probe
deleted file mode 100644
index 21f85321..00000000
Binary files a/android/.gradle/file-system.probe and /dev/null differ
diff --git a/android/.gradle/vcs-1/gc.properties b/android/.gradle/vcs-1/gc.properties
deleted file mode 100644
index e69de29b..00000000
diff --git a/android/app/.gitignore b/android/app/.gitignore
deleted file mode 100644
index 043df802..00000000
--- a/android/app/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/build/*
-!/build/.npmkeep
diff --git a/assets/README.md b/assets/README.md
new file mode 100644
index 00000000..b9272ff0
--- /dev/null
+++ b/assets/README.md
@@ -0,0 +1,2 @@
+
+Application icons are here. They are processed for android & ios by the `capacitor-assets` command, as indicated in the BUILDING.md file.
diff --git a/ios/App/App.xcodeproj/project.pbxproj b/ios/App/App.xcodeproj/project.pbxproj
index 848ad8dc..9b78b67e 100644
--- a/ios/App/App.xcodeproj/project.pbxproj
+++ b/ios/App/App.xcodeproj/project.pbxproj
@@ -122,8 +122,8 @@
504EC2FC1FED79650016851F /* Project object */ = {
isa = PBXProject;
attributes = {
- LastSwiftUpdateCheck = 0920;
- LastUpgradeCheck = 0920;
+ LastSwiftUpdateCheck = 920;
+ LastUpgradeCheck = 920;
TargetAttributes = {
504EC3031FED79650016851F = {
CreatedOnToolsVersion = 9.2;
@@ -348,18 +348,19 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = 7XVXYPEQYJ;
+ CURRENT_PROJECT_VERSION = 17;
+ DEVELOPMENT_TEAM = GM3FS5JQPH;
INFOPLIST_FILE = App/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- MARKETING_VERSION = 1.0;
+ MARKETING_VERSION = 0.4.6;
OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\"";
- PRODUCT_BUNDLE_IDENTIFIER = com.brownspank.timesafari;
+ PRODUCT_BUNDLE_IDENTIFIER = app.timesafari;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic"; /* allows agvtool to set *_VERSION settings */
};
name = Debug;
};
@@ -369,17 +370,18 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = 7XVXYPEQYJ;
+ CURRENT_PROJECT_VERSION = 17;
+ DEVELOPMENT_TEAM = GM3FS5JQPH;
INFOPLIST_FILE = App/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = com.brownspank.timesafari;
+ MARKETING_VERSION = 0.4.6;
+ PRODUCT_BUNDLE_IDENTIFIER = app.timesafari;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic"; /* allows agvtool to set *_VERSION settings */
};
name = Release;
};
diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png b/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png
index adf6ba01..f5aba734 100644
Binary files a/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png and b/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png differ
diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json
index 9b7d382d..b1a84833 100644
--- a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ b/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -1,14 +1,14 @@
{
- "images" : [
+ "images": [
{
- "filename" : "AppIcon-512@2x.png",
- "idiom" : "universal",
- "platform" : "ios",
- "size" : "1024x1024"
+ "idiom": "universal",
+ "size": "1024x1024",
+ "filename": "AppIcon-512@2x.png",
+ "platform": "ios"
}
],
- "info" : {
- "author" : "xcode",
- "version" : 1
+ "info": {
+ "author": "xcode",
+ "version": 1
}
-}
+}
\ No newline at end of file
diff --git a/ios/App/App/Info.plist b/ios/App/App/Info.plist
index 08c0cee2..b0b1f21a 100644
--- a/ios/App/App/Info.plist
+++ b/ios/App/App/Info.plist
@@ -5,7 +5,7 @@
CFBundleDevelopmentRegion
en
CFBundleDisplayName
- TimeSafari
+ TimeSafari
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIdentifier
@@ -22,6 +22,10 @@
$(CURRENT_PROJECT_VERSION)
LSRequiresIPhoneOS
+ NSCameraUsageDescription
+ Time Safari allows you to take photos, and also scan QR codes from contacts.
+ NSPhotoLibraryUsageDescription
+ Time Safari allows you to upload photos.
UILaunchStoryboardName
LaunchScreen
UIMainStoryboardFile
@@ -45,9 +49,5 @@
UIViewControllerBasedStatusBarAppearance
- NSCameraUsageDescription
- This app uses the camera to scan QR codes and capture photos.
- NSPhotoLibraryUsageDescription
- This app needs access to your photo library to save and select photos.
diff --git a/package-lock.json b/package-lock.json
index 1ad0b837..fce02999 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "timesafari",
- "version": "0.4.4",
+ "version": "0.4.6",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "timesafari",
- "version": "0.4.4",
+ "version": "0.4.6",
"dependencies": {
"@capacitor-mlkit/barcode-scanning": "^6.0.0",
"@capacitor/android": "^6.2.0",
diff --git a/package.json b/package.json
index 57cad6d1..b73c0967 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "timesafari",
- "version": "0.4.4",
+ "version": "0.4.6",
"description": "Time Safari Application",
"author": {
"name": "Time Safari Team"
diff --git a/pkgx.yaml b/pkgx.yaml
index 48f895b8..08559bf2 100644
--- a/pkgx.yaml
+++ b/pkgx.yaml
@@ -1,5 +1,6 @@
dependencies:
- gradle
- java
+ - pod
# other dependencies are discovered via package.json & requirements.txt & Gemfile (I'm guessing).
diff --git a/test-playwright/test-playwright/test-results/.last-run.json b/test-playwright/test-playwright/test-results/.last-run.json
deleted file mode 100644
index 5fca3f84..00000000
--- a/test-playwright/test-playwright/test-results/.last-run.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "status": "failed",
- "failedTests": []
-}
\ No newline at end of file
diff --git a/test-playwright/test-results/.last-run.json b/test-playwright/test-results/.last-run.json
deleted file mode 100644
index e0f4d0b3..00000000
--- a/test-playwright/test-results/.last-run.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "status": "failed",
- "failedTests": [
- "a29eb57667e0fb28c7e9-7a80e551e7f16a766d0d",
- "a29eb57667e0fb28c7e9-1a8c76601bb6ea4f735c",
- "a29eb57667e0fb28c7e9-0a3670fa77fcd5ac9827",
- "a29eb57667e0fb28c7e9-90c8866cf70c7f96647d",
- "a29eb57667e0fb28c7e9-4abc584edcf7a6a12389",
- "a29eb57667e0fb28c7e9-3b443656a23fd8e7eb76",
- "a29eb57667e0fb28c7e9-1f63cf7a41b756ffe01f",
- "a29eb57667e0fb28c7e9-4eb03633761e58eac0a4",
- "db48a48c514e3e2940e5-cef25040a0b285eed2ba",
- "1c818805c9b0ac973736-726f18ba6163d57238c8",
- "c52ae54d86eda05904f3-adf7525a07e75f4e3cc2",
- "2fac21b9c9c3eb062631-9d2d2e9a199603c11b9b",
- "64242279fe0133650483-20fbacc4e45c5561df6c",
- "a7ff64a290be94f9d82c-e26ceb13031dafad1133",
- "868977083268005e6ec0-c27d226d34e20ba4863d",
- "5e149db5da4a5e319bcc-3298c84d0ebfff5e6d7c",
- "5e149db5da4a5e319bcc-1981ba81641b6000f80b",
- "2b5f6d3352de2040032d-bf5ed3a9483d90c396dd",
- "2b5f6d3352de2040032d-6f52c3699c55c19ccad8",
- "2b5f6d3352de2040032d-0f478a3208f64651daa1",
- "2b5f6d3352de2040032d-a05f542cad739ee3b5b9",
- "955bdfdfe05b442c0f5d-a9ec2b8bc7bd90ea0439",
- "955bdfdfe05b442c0f5d-2c38171f673436923a8b",
- "1a1fd29d3f0573e705e6-a3a6805908fe9a29ab11"
- ]
-}
\ No newline at end of file