diff --git a/.github/workflows/mac_store_build.yml b/.github/workflows/mac_store_build.yml
new file mode 100644
index 0000000000..388df3af96
--- /dev/null
+++ b/.github/workflows/mac_store_build.yml
@@ -0,0 +1,150 @@
+name: Mac pkg Java CI with Gradle
+on: [push, pull_request]
+jobs:
+ set-env-vars:
+ runs-on: ubuntu-20.04
+ steps:
+ - uses: actions/checkout@v4
+ - uses: FranzDiebold/github-env-vars-action@v2.1.0
+ - name: Parse SemVer if tagged build
+ id: semver_parser
+ uses: booxmedialtd/ws-action-parse-semver@v1.4.2
+ with:
+ input_string: ${{ env.CI_REF_NAME }}
+ version_extractor_regex: "v(.*)$"
+ if: contains( github.ref, 'refs/tags/v' )
+ - name: set version var for tags and update path for releases
+ id: tagged
+ run: |
+ echo "GHA_VERSION=${{ steps.semver_parser.outputs.fullversion }}" >> $GITHUB_ENV && \
+ echo "UPDATE_PATH=release" >> $GITHUB_ENV && \
+ echo "PRERELEASE_BOOL=false" >> $GITHUB_ENV
+ if: contains( github.ref, 'refs/tags/v')
+ - name: set s3 destination_dir
+ run: echo "S3_DESTINATION=$CI_REPOSITORY_OWNER/$CI_REPOSITORY_NAME/$UPDATE_PATH" >> $GITHUB_ENV
+ - name: output env vars
+ id: output_env_vars_step
+ run: |
+ echo "GHA_VERSION=$GHA_VERSION" >> $GITHUB_OUTPUT
+ echo "UPDATE_PATH=$UPDATE_PATH" >> $GITHUB_OUTPUT
+ echo "PRERELEASE_BOOL=$PRERELEASE_BOOL" >> $GITHUB_OUTPUT
+ echo "S3_DESTINATION=$S3_DESTINATION" >> $GITHUB_OUTPUT
+ outputs:
+ GHA_VERSION: ${{ steps.output_env_vars_step.outputs.GHA_VERSION }}
+ UPDATE_PATH: ${{ steps.output_env_vars_step.outputs.UPDATE_PATH }}
+ PRERELEASE_BOOL: ${{ steps.output_env_vars_step.outputs.PRERELEASE_BOOL }}
+ S3_DESTINATION: ${{ steps.output_env_vars_step.outputs.S3_DESTINATION }}
+ IS_RELEASE: ${{ steps.tagged.outcome }}
+
+ build:
+ runs-on: ubuntu-20.04
+ needs: set-env-vars
+ if: ${{ needs.set-env-vars.outputs.IS_RELEASE != 'skipped' }}
+ steps:
+ - uses: actions/checkout@v4
+ - name: Set Build Secrets
+ uses: 1password/load-secrets-action@v2
+ with:
+ export-env: true
+ env:
+ OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}
+ MAC_SIGNING_KEY_BASE64: "op://DevOps/Orature_CI_CD/Cert-Signing-Key_V2/B64_P12"
+ MAC_APP_STORE_NOTARY_API_KEY: "op://DevOps/Orature_CI_CD/App-Store-Connect-API-Key/app-store-connect-private-key.p8"
+ INSTALL4J_LICENSE_11: "op://DevOps/Orature_CI_CD/INSTALL4J_LICENSE"
+ MAC_KEYSTORE_PW: "op://DevOps/Orature_CI_CD/MAC-P12-SIGNING-PASSWORD"
+ MAC_APP_PROVISION_PROFILE: "op://DevOps/Orature_CI_CD/Apple-Store-Provision-Profile/B64_PROFILE"
+ ORG_GRADLE_PROJECT_githubOauthToken: "op://DevOps/Orature_CI_CD/CRASH_REPORTS_OAUTH_TOKEN"
+ ORG_GRADLE_PROJECT_sentryDsn: "op://DevOps/Orature_CI_CD/SENTRY_OTTER_DSN"
+ SONAR_TOKEN: "op://DevOps/Orature_CI_CD/SONAR_TOKEN"
+ MAC_NOTARY_ISSUER: "op://DevOps/Orature_CI_CD/MAC_NOTARY_ISSUER"
+ MAC_NOTARY_KEY_ID: "op://DevOps/Orature_CI_CD/MAC_NOTARY_KEY_ID"
+ - name: Write mac secrets for i4j
+ shell: bash
+ run: |
+ echo -n $MAC_SIGNING_KEY_BASE64 | base64 -d > $HOME/signing_macos.p12 && echo -n $MAC_APP_STORE_NOTARY_API_KEY > $HOME/mac_app_notary_key.p8 && echo -n $MAC_APP_PROVISION_PROFILE | base64 -d > $HOME/orature.provisionprofile
+ - name: install4j build
+ shell: bash
+ run: |
+ docker run -v $(pwd):/repo \
+ -v $HOME/signing_macos.p12:/root/signing_macos.p12 \
+ -v $HOME/mac_app_notary_key.p8:/root/mac_app_notary_key.p8 \
+ -v $HOME/orature.provisionprofile:/root/orature.provisionprofile \
+ -e UPDATE_PATH \
+ -e ORG_GRADLE_PROJECT_gradlewCommandVersionProp \
+ -e ORG_GRADLE_PROJECT_gradlewForMacAppStore \
+ -e ORG_GRADLE_PROJECT_gradlewCommandLicenseProp \
+ -e ORG_GRADLE_PROJECT_githubRepoUrl \
+ -e ORG_GRADLE_PROJECT_gradlewmacKeystorePassword \
+ -e ORG_GRADLE_PROJECT_githubOauthToken \
+ -e ORG_GRADLE_PROJECT_sentryDsn \
+ -e GITHUB_TOKEN \
+ -e SONAR_TOKEN \
+ -e MAC_NOTARY_ISSUER \
+ -e MAC_NOTARY_KEY_ID \
+ wycliffeassociates/install4j-docker:11.0 \
+ ./gradlew build :jvm:workbookapp:install4jdeploy "-Dorg.gradle.jvmargs=-Xmx4096m -Dnet.bytebuddy.experimental=true -XX:MaxMetaspaceSize=1024m"
+ env:
+ UPDATE_PATH: ${{ needs.set-env-vars.outputs.UPDATE_PATH }}
+ ORG_GRADLE_PROJECT_gradlewCommandVersionProp: ${{ needs.set-env-vars.outputs.GHA_VERSION }}
+ ORG_GRADLE_PROJECT_gradlewCommandLicenseProp: ${{ env.INSTALL4J_LICENSE_11 }}
+ ORG_GRADLE_PROJECT_gradlewForMacAppStore: true
+ ORG_GRADLE_PROJECT_githubRepoUrl: https://api.github.com/repos/OratureCrashReports/orature-crash-reports/issues
+ ORG_GRADLE_PROJECT_gradlewmacKeystorePassword: ${{ env.MAC_KEYSTORE_PW }}
+ ORG_GRADLE_PROJECT_githubOauthToken: ${{ env.ORG_GRADLE_PROJECT_githubOauthToken }}
+ ORG_GRADLE_PROJECT_sentryDsn: ${{ env.ORG_GRADLE_PROJECT_sentryDsn }}
+ SONAR_TOKEN: ${{ env.SONAR_TOKEN }}
+ MAC_NOTARY_ISSUER: ${{ env.MAC_NOTARY_ISSUER }}
+ MAC_NOTARY_KEY_ID: ${{ env.MAC_NOTARY_KEY_ID }}
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Get notarization log
+ if: ${{ failure() }}
+ run: |
+ NOTARIZATION_LOG=$(find /repo/jvm/workbookapp/.exec/ -name "*.notarization.log")
+ echo "NOTARIZATION_LOG=$NOTARIZATION_LOG" >> $GITHUB_ENV
+ - name: Write notarization log to artifact
+ if: ${{ failure() }}
+ uses: actions/upload-artifact@v4
+ with:
+ name: notarization-log
+ path: ${{ env.NOTARIZATION_LOG }}
+ retention-days: 7
+
+ - name: cache binaries
+ uses: actions/upload-artifact@v4
+ with:
+ name: upload-binaries
+ include-hidden-files: true
+ path: jvm/workbookapp/.exec/
+ upload:
+ runs-on: ubuntu-20.04
+ needs: [set-env-vars, build]
+ steps:
+ - name: Set upload secrets
+ uses: 1password/load-secrets-action@v2
+ with:
+ export-env: true
+ env:
+ OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}
+ AWS_KEY_ID: "op://DevOps/travis-nightlybuilds aws s3 api access for travis uploads/S3_ACCESS_KEY_ID"
+ AWS_SECRET_ACCESS_KEY: "op://DevOps/travis-nightlybuilds aws s3 api access for travis uploads/S3_SECRET_ACCESS_KEY"
+ AWS_BUCKET: "op://DevOps/travis-nightlybuilds aws s3 api access for travis uploads/S3_BUCKET"
+ - name: download artifacts from previous job
+ uses: actions/download-artifact@v4
+ with:
+ name: upload-binaries
+ include-hidden-files: true
+ path: ${{ github.workspace }}/binaries
+ - name: upload
+ if: github.event_name != 'pull_request'
+ run: |
+ AWS_DEFAULT_REGION=us-east-1 AWS_ACCESS_KEY_ID=${{env.AWS_KEY_ID}} AWS_SECRET_ACCESS_KEY=${{env.AWS_SECRET_ACCESS_KEY}} aws s3 sync . s3://${{ env.AWS_BUCKET }}/${{ needs.set-env-vars.outputs.S3_DESTINATION }}
+ working-directory: ${{ github.workspace }}/binaries
+ - name: upload artifacts to github releases on tags
+ uses: "marvinpinto/action-automatic-releases@v1.2.1"
+ if: contains( github.ref, 'refs/tags/v' )
+ with:
+ repo_token: "${{ secrets.GITHUB_TOKEN }}"
+ prerelease: ${{ needs.set-env-vars.outputs.PRERELEASE_BOOL }}
+ files: |
+ ${{ github.workspace }}/binaries/*.pkg
diff --git a/VERSION b/VERSION
index ab6c88e86d..f4e47c2e5e 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-3.1.28
+3.1.30
\ No newline at end of file
diff --git a/entitlements.plist b/entitlements.plist
new file mode 100644
index 0000000000..10f1114e54
--- /dev/null
+++ b/entitlements.plist
@@ -0,0 +1,11 @@
+
+
+
+
+ com.apple.application-identifier
+ WNR2N2D4UW.org.wycliffeassociates.otter
+ com.apple.developer.team-identifier
+ WNR2N2D4UW
+
+
diff --git a/jvm/workbookapp/build.gradle b/jvm/workbookapp/build.gradle
index b39df66f5e..803cdbcc36 100644
--- a/jvm/workbookapp/build.gradle
+++ b/jvm/workbookapp/build.gradle
@@ -120,6 +120,11 @@ task install4jdeploy(type: com.install4j.gradle.Install4jTask) {
if (project.hasProperty('gradlewCommandVersionProp')) {
release = gradlewCommandVersionProp
}
+ if (project.hasProperty('gradlewForMacAppStore')) {
+ buildIds = [546, 519]
+ } else {
+ buildIds = [60, 158, 415, 59]
+ }
}
dependencies {
diff --git a/jvm/workbookapp/orature_icon_128@2x.png b/jvm/workbookapp/orature_icon_128@2x.png
new file mode 100644
index 0000000000..6ba15a9da1
Binary files /dev/null and b/jvm/workbookapp/orature_icon_128@2x.png differ
diff --git a/jvm/workbookapp/orature_icon_16@2x.png b/jvm/workbookapp/orature_icon_16@2x.png
new file mode 100644
index 0000000000..ef9469f899
Binary files /dev/null and b/jvm/workbookapp/orature_icon_16@2x.png differ
diff --git a/jvm/workbookapp/orature_icon_16x16.png b/jvm/workbookapp/orature_icon_16x16.png
new file mode 100644
index 0000000000..30d16c874a
Binary files /dev/null and b/jvm/workbookapp/orature_icon_16x16.png differ
diff --git a/jvm/workbookapp/orature_icon_256x256.png b/jvm/workbookapp/orature_icon_256x256.png
new file mode 100644
index 0000000000..ad24f3fc9a
Binary files /dev/null and b/jvm/workbookapp/orature_icon_256x256.png differ
diff --git a/jvm/workbookapp/orature_icon_256x256@2x.png b/jvm/workbookapp/orature_icon_256x256@2x.png
new file mode 100644
index 0000000000..aa2be5e7e2
Binary files /dev/null and b/jvm/workbookapp/orature_icon_256x256@2x.png differ
diff --git a/jvm/workbookapp/orature_icon_32x32.png b/jvm/workbookapp/orature_icon_32x32.png
new file mode 100644
index 0000000000..1ca3c7a648
Binary files /dev/null and b/jvm/workbookapp/orature_icon_32x32.png differ
diff --git a/jvm/workbookapp/orature_icon_32x32@2x.png b/jvm/workbookapp/orature_icon_32x32@2x.png
new file mode 100644
index 0000000000..41e949d301
Binary files /dev/null and b/jvm/workbookapp/orature_icon_32x32@2x.png differ
diff --git a/jvm/workbookapp/orature_icon_512x512.png b/jvm/workbookapp/orature_icon_512x512.png
new file mode 100644
index 0000000000..3457fb05cc
Binary files /dev/null and b/jvm/workbookapp/orature_icon_512x512.png differ
diff --git a/jvm/workbookapp/orature_icon_512x512@2x.png b/jvm/workbookapp/orature_icon_512x512@2x.png
new file mode 100644
index 0000000000..9dd6f3c619
Binary files /dev/null and b/jvm/workbookapp/orature_icon_512x512@2x.png differ
diff --git a/jvm/workbookapp/otter.install4j b/jvm/workbookapp/otter.install4j
index 1bb7ed985e..435edbd268 100644
--- a/jvm/workbookapp/otter.install4j
+++ b/jvm/workbookapp/otter.install4j
@@ -25,7 +25,7 @@
-
+
@@ -33,10 +33,36 @@
<key>NSMicrophoneUsageDescription</key>
-<string>Enable Microphone for recording</string>
+<string>Enable Microphone for recording</string>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <key>NSMicrophoneUsageDescription</key>
+<string>Enable Microphone for recording</string>
+<key>ITSAppUsesNonExemptEncryption</key>
+<false/>
+
+
+
+
+
+
+
@@ -908,5 +934,9 @@ done
+
+
+
+