diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 4a9270c2..d319eeaf 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -2,8 +2,33 @@ name: CI
on: [ push, pull_request ]
jobs:
+ checks:
+ name: "Lint & Test"
+ runs-on: macos-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-java@v1
+ with:
+ java-version: '12.x'
+ - uses: subosito/flutter-action@v1
+ with:
+ channel: 'dev'
+ - name: "Lint"
+ run: |
+ touch .env
+ flutter analyze
+ - name: "Test"
+ run: flutter test
+ - name: "Upload Failure Screenshots"
+ uses: actions/upload-artifact@v2
+ if: failure()
+ with:
+ name: golden-failures
+ path: test/failures
+
version:
name: "Get Version"
+ needs: checks
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.VERSION }}
@@ -39,30 +64,6 @@ jobs:
echo ::set-output name=VERSION::$GITHUB_RUN_ID
fi
- checks:
- name: "Lint & Test"
- runs-on: macos-latest
- steps:
- - uses: actions/checkout@v2
- - uses: actions/setup-java@v1
- with:
- java-version: '12.x'
- - uses: subosito/flutter-action@v1
- with:
- channel: 'dev'
- - name: "Lint"
- run: |
- touch .env
- flutter analyze
- - name: "Test"
- run: flutter test
- - name: "Upload failure Screenshots"
- uses: actions/upload-artifact@v2
- if: failure()
- with:
- name: golden-failures
- path: test/failures
-
#########
# macos #
#########
@@ -72,82 +73,88 @@ jobs:
needs: version
steps:
- uses: actions/checkout@v2
+ - name: "Gen Keychain"
+ env:
+ FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }}
+ MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.MATCH_GIT_BASIC_AUTHORIZATION }}
+ MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
+ continue-on-error: true
+ run: |
+ echo "${{ secrets.APPLE_AUTH_KEY_P8 }}" | base64 --decode > AuthKey_MK4628AYTK.p8
+ mkdir ~/.private_keys
+ cp AuthKey_MK4628AYTK.p8 ~/.private_keys/
+ cd macos
+ gem install fastlane
+ fastlane keychain
- uses: actions/setup-java@v1
with:
java-version: '12.x'
- - name: "Setup Code signing"
- env:
- DEV_P12_CERT: ${{ secrets.DEV_P12_CERT }}
- DIST_P12_CERT: ${{ secrets.DIST_P12_CERT }}
- DEV_P12_PASS: ${{ secrets.DEV_P12_PASS }}
- DIST_P12_PASS: ${{ secrets.DIST_P12_PASS }}
- IOS_PROVISION: ${{ secrets.IOS_PROVISION }}
- MAC_PROVISION: ${{ secrets.MAC_PROVISION }}
- run: |
- bash ~/.github/workflows/utils/set-keychain-certs.sh
- uses: subosito/flutter-action@v1
with:
channel: 'dev'
- - name: "Create App"
- env:
- FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD: ${{ secrets.FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD }}
- FASTLANE_SESSION: ${{ secrets.FASTLANE_SESSION }}
- FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }}
+ - name: "Build"
run: |
flutter config --enable-macos-desktop
flutter pub get
-
- if [[ "${{ github.ref }}" == "refs/heads/master" ]]
+ if [[ "${{ github.ref }}" == "refs/heads/develop" ]]
then
- echo "${{ secrets.B64_ENV }}" | base64 --decode > .env
+ echo "${{ secrets.B64_DEV_ENV }}" | base64 --decode > .env
else
- echo "${{ secrets.B64_DEV_ENV }}" | base64 --decode > .env
+ echo "${{ secrets.B64_ENV }}" | base64 --decode > .env
fi
- cd macos
-
# write version
+ cd macos
xcrun agvtool new-marketing-version ${{ needs.version.outputs.version }}
xcrun agvtool new-version -all ${{ needs.version.outputs.version }}
+
+ cd ../
+ flutter build macos --release --build-name=${{ needs.version.outputs.version }}
+ /usr/bin/codesign --force --deep --options runtime --strict -s Z28DW76Y3W build/macos/Build/Products/Release/notifi.app
- pod install
-
- gem install fastlane
- fastlane mac build
-
- - name: "Create .dmg"
- continue-on-error: true
+ - name: "Create & Notarize .dmg"
+ env:
+ APPLE_USERNAME: ${{ secrets.APPLE_USERNAME }}
+ APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
run: |
npm install --global create-dmg
- mkdir dmg
- create-dmg ./macos/notifi.app dmg/
+
+ mkdir dmg/
+ create-dmg build/macos/Build/Products/Release/notifi.app dmg/
+ mv dmg/* notifi.dmg
+
+ dmg_path="notifi.dmg"
+
+ /usr/bin/codesign --force --deep --strict --options runtime -s "Z28DW76Y3W" "$dmg_path"
+
+ echo "notarizing..."
+ notarize=$(xcrun altool -t osx --primary-bundle-id it.notifi.notifi --output-format json --notarize-app -f "$dmg_path" --username "$APPLE_USERNAME" --password "$APPLE_PASSWORD")
+ uuid=$(echo "$notarize" | python3 -c "import sys, json; print(json.load(sys.stdin)['notarization-upload']['RequestUUID'])")
+ echo "$uuid"
+
+ # wait for apple to notarize
+ sleep 60
+
+ while true; do
+ check=$(xcrun altool --notarization-info "$uuid" --output-format json --username "$APPLE_USERNAME" --password "$APPLE_PASSWORD")
+ echo $check
+ status=$(echo "$check" | python3 -c "import sys, json; print(json.load(sys.stdin)['notarization-info']['Status'])")
+ echo $status
+ if [ "$status" != "in progress" ]; then
+ echo "staple dmg..."
+ xcrun stapler staple -v "$dmg_path"
+ exit 0
+ fi
+ sleep 10
+ done
+ exit 1
- name: "Store .dmg artifact"
uses: actions/upload-artifact@v2
with:
name: notifi-dmg
- path: dmg/
+ path: notifi.dmg
if-no-files-found: error
- deploy-macos:
- name: "Deploy MacOS"
- if: ${{ github.ref == 'refs/heads/master' || (!github.event.issue.pull_request && github.ref == 'refs/heads/develop') }}
- runs-on: macos-latest
- needs: [ checks, build-macos, version ]
- steps:
- - uses: actions/download-artifact@v2
- id: download
- with:
- name: notifi-dmg
- - name: "Deploy .dmg as GH release"
- uses: marvinpinto/action-automatic-releases@latest
- with:
- repo_token: "${{ secrets.GITHUB_TOKEN }}"
- prerelease: ${{ github.ref == 'refs/heads/develop' }}
- automatic_release_tag: ${{ needs.version.outputs.version }}
- title: "Release ${{ needs.version.outputs.version }}"
- files: |
- ${{steps.download.outputs.download-path}}
-
#########
# iOS #
#########
@@ -161,25 +168,16 @@ jobs:
- uses: actions/setup-java@v1
with:
java-version: '12.x'
- - name: "Setup Code signing"
- env:
- DEV_P12_CERT: ${{ secrets.DEV_P12_CERT }}
- DIST_P12_CERT: ${{ secrets.DIST_P12_CERT }}
- DEV_P12_PASS: ${{ secrets.DEV_P12_PASS }}
- DIST_P12_PASS: ${{ secrets.DIST_P12_PASS }}
- IOS_PROVISION: ${{ secrets.IOS_PROVISION }}
- MAC_PROVISION: ${{ secrets.MAC_PROVISION }}
- run: |
- bash ~/.github/workflows/utils/set-keychain-certs.sh
+
- uses: subosito/flutter-action@v1
with:
channel: 'dev'
- name: "Build & Deploy"
env:
- FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD: ${{ secrets.FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD }}
- FASTLANE_SESSION: ${{ secrets.FASTLANE_SESSION }}
FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }}
+ MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.MATCH_GIT_BASIC_AUTHORIZATION }}
+ MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
run: |
flutter pub get
if [[ "${{ github.ref }}" != "refs/heads/master" ]]
@@ -189,7 +187,10 @@ jobs:
echo "${{ secrets.B64_ENV }}" | base64 --decode > .env
fi
+ echo "${{ secrets.APPLE_AUTH_KEY_P8 }}" | base64 --decode > AuthKey_MK4628AYTK.p8
+
cd ios
+ flutter pub get
# write version
xcrun agvtool new-marketing-version ${{ needs.version.outputs.version }}
@@ -198,9 +199,31 @@ jobs:
pod install
gem install fastlane
+
if [[ "${{ github.ref }}" == "refs/heads/master" ]]
then
fastlane asdeploy
else
fastlane tfdeploy
fi
+
+ # Create release
+ release:
+ name: "Release"
+ if: ${{ github.ref == 'refs/heads/master' || (!github.event.issue.pull_request && github.ref == 'refs/heads/develop') }}
+ runs-on: macos-latest
+ needs: [ checks, build-macos, build-ios, version ]
+ steps:
+ - uses: actions/download-artifact@v2
+ id: download
+ with:
+ name: notifi-dmg
+ - name: "Create Release"
+ uses: marvinpinto/action-automatic-releases@latest
+ with:
+ repo_token: "${{ secrets.GITHUB_TOKEN }}"
+ prerelease: ${{ github.ref == 'refs/heads/develop' }}
+ automatic_release_tag: ${{ needs.version.outputs.version }}
+ title: "Release ${{ needs.version.outputs.version }}"
+ files: |
+ ${{steps.download.outputs.download-path}}
diff --git a/.github/workflows/scripts/notarize.sh b/.github/workflows/scripts/notarize.sh
new file mode 100644
index 00000000..2384f50c
--- /dev/null
+++ b/.github/workflows/scripts/notarize.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+npm install --global create-dmg
+
+mkdir dmg/
+create-dmg build/macos/Build/Products/Release/notifi.app dmg/
+mv dmg/* notifi.dmg
+
+dmg_path="notifi.dmg"
+
+/usr/bin/codesign --force --deep --strict --options runtime -s "Z28DW76Y3W" "$dmg_path"
+
+echo "notarizing..."
+notarize=$(xcrun altool -t osx --primary-bundle-id it.notifi.notifi --output-format json --notarize-app -f "$dmg_path" --username "$APPLE_USERNAME" --password "$APPLE_PASSWORD")
+uuid=$(echo "$notarize" | python3 -c "import sys, json; print(json.load(sys.stdin)['notarization-upload']['RequestUUID'])")
+echo "$uuid"
+
+# wait for apple to notarize
+sleep 60
+
+while true; do
+ check=$(xcrun altool --notarization-info "$uuid" --output-format json --username "$APPLE_USERNAME" --password "$APPLE_PASSWORD")
+ echo $check
+ status=$(echo "$check" | python3 -c "import sys, json; print(json.load(sys.stdin)['notarization-info']['Status'])")
+ echo $status
+ if [ "$status" != "in progress" ]; then
+ echo "staple dmg..."
+ xcrun stapler staple -v "$dmg_path"
+ exit
+ fi
+done
diff --git a/.github/workflows/utils/set-keychain-certs.sh b/.github/workflows/utils/set-keychain-certs.sh
deleted file mode 100644
index 01dd9f10..00000000
--- a/.github/workflows/utils/set-keychain-certs.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/bash
-echo "$DEV_P12_CERT" | base64 --decode > devcert.p12 # ios
-echo "$DIST_P12_CERT" | base64 --decode > distcert.p12
-security create-keychain -p p4ssword build.keychain
-security default-keychain -s build.keychain
-security unlock-keychain -p p4ssword build.keychain
-security import devcert.p12 -k build.keychain -P "$DEV_P12_PASS" -T /usr/bin/codesign
-security import distcert.p12 -k build.keychain -P "$DIST_P12_PASS" -T /usr/bin/codesign
-security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k p4ssword build.keychain
-
-mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
-echo "$IOS_PROVISION" | base64 --decode > ~/Library/MobileDevice/Provisioning\ Profiles/profile.mobileprovision
-echo "$MAC_PROVISION" | base64 --decode > ~/Library/MobileDevice/Provisioning\ Profiles/mac.provisionprofile
diff --git a/.gitignore b/.gitignore
index 2a695c12..80b7d304 100644
--- a/.gitignore
+++ b/.gitignore
@@ -55,3 +55,5 @@ app.*.map.json
/macos/notifi.app/
/ios/fastlane/report.xml
/macos/fastlane/report.xml
+AuthKey_MK4628AYTK.p8
+/.env
\ No newline at end of file
diff --git a/README.md b/README.md
index 268b4766..c7261dc9 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,8 @@ flutter channel master
flutter upgrade
```
+# Run locally
+
## create .env with the content
```
CODE_ENDPOINT=http://127.0.0.1:9081/code
@@ -41,23 +43,23 @@ flutter build macos
flutter run -d macos
```
-## Tests
+# Tests
-### Lint & Test
+## Lint & Test
```bash
bash ./pre-commit.sh
```
-### Set screenshot asserts
+## Set screenshot asserts
```
bash ./test/set-asserts.sh
```
-## Extras
+# Extras
-### Add pre-commit hook
+## Add pre-commit hook
```bash
ln -s $(pwd)/pre-commit.sh $(pwd)/.git/hooks/pre-commit
@@ -65,13 +67,7 @@ chmod +x $(pwd)/.git/hooks/pre-commit
```
### fastlane
-#### provision profiles
-```
-fastlane sigh -p macos
-fastlane sigh -p ios
-```
-###
### Jetbrains flutter plugin:
diff --git a/images/bell.png b/images/bell.png
index d8c80f4c..01890653 100644
Binary files a/images/bell.png and b/images/bell.png differ
diff --git a/images/sad.png b/images/sad.png
index 05ab5d7e..76daa577 100644
Binary files a/images/sad.png and b/images/sad.png differ
diff --git a/ios/Podfile b/ios/Podfile
index 252d9ec7..9411102b 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -1,5 +1,5 @@
# Uncomment this line to define a global platform for your project
-platform :ios, '9.0'
+platform :ios, '10.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index f7d9d9e7..d569f9f7 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -15,17 +15,17 @@ PODS:
- FirebaseCoreDiagnostics (~> 7.0)
- GoogleUtilities/Environment (~> 7.0)
- GoogleUtilities/Logger (~> 7.0)
- - FirebaseCoreDiagnostics (7.6.0):
- - GoogleDataTransport (~> 8.0)
+ - FirebaseCoreDiagnostics (7.11.0):
+ - GoogleDataTransport (~> 8.4)
- GoogleUtilities/Environment (~> 7.0)
- GoogleUtilities/Logger (~> 7.0)
- - nanopb (~> 2.30907.0)
- - FirebaseInstallations (7.6.0):
+ - nanopb (~> 2.30908.0)
+ - FirebaseInstallations (7.11.0):
- FirebaseCore (~> 7.0)
- GoogleUtilities/Environment (~> 7.0)
- GoogleUtilities/UserDefaults (~> 7.0)
- PromisesObjC (~> 1.2)
- - FirebaseInstanceID (7.10.0):
+ - FirebaseInstanceID (7.11.0):
- FirebaseCore (~> 7.0)
- FirebaseInstallations (~> 7.0)
- GoogleUtilities/Environment (~> 7.0)
@@ -47,30 +47,32 @@ PODS:
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- - GoogleDataTransport (8.2.0):
- - nanopb (~> 2.30907.0)
- - GoogleUtilities/AppDelegateSwizzler (7.2.2):
+ - GoogleDataTransport (8.4.0):
+ - GoogleUtilities/Environment (~> 7.2)
+ - nanopb (~> 2.30908.0)
+ - PromisesObjC (~> 1.2)
+ - GoogleUtilities/AppDelegateSwizzler (7.3.1):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- - GoogleUtilities/Environment (7.2.2):
+ - GoogleUtilities/Environment (7.3.1):
- PromisesObjC (~> 1.2)
- - GoogleUtilities/Logger (7.2.2):
+ - GoogleUtilities/Logger (7.3.1):
- GoogleUtilities/Environment
- - GoogleUtilities/Network (7.2.2):
+ - GoogleUtilities/Network (7.3.1):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Reachability
- - "GoogleUtilities/NSData+zlib (7.2.2)"
- - GoogleUtilities/Reachability (7.2.2):
+ - "GoogleUtilities/NSData+zlib (7.3.1)"
+ - GoogleUtilities/Reachability (7.3.1):
- GoogleUtilities/Logger
- - GoogleUtilities/UserDefaults (7.2.2):
+ - GoogleUtilities/UserDefaults (7.3.1):
- GoogleUtilities/Logger
- - nanopb (2.30907.0):
- - nanopb/decode (= 2.30907.0)
- - nanopb/encode (= 2.30907.0)
- - nanopb/decode (2.30907.0)
- - nanopb/encode (2.30907.0)
+ - nanopb (2.30908.0):
+ - nanopb/decode (= 2.30908.0)
+ - nanopb/encode (= 2.30908.0)
+ - nanopb/decode (2.30908.0)
+ - nanopb/encode (2.30908.0)
- package_info (0.0.1):
- Flutter
- path_provider (0.0.1):
@@ -78,6 +80,8 @@ PODS:
- "permission_handler (4.4.0+hotfix.4)":
- Flutter
- PromisesObjC (1.2.12)
+ - share (0.0.1):
+ - Flutter
- sqflite (0.0.2):
- Flutter
- FMDB (>= 2.7.5)
@@ -94,6 +98,7 @@ DEPENDENCIES:
- package_info (from `.symlinks/plugins/package_info/ios`)
- path_provider (from `.symlinks/plugins/path_provider/ios`)
- permission_handler (from `.symlinks/plugins/permission_handler/ios`)
+ - share (from `.symlinks/plugins/share/ios`)
- sqflite (from `.symlinks/plugins/sqflite/ios`)
- url_launcher (from `.symlinks/plugins/url_launcher/ios`)
@@ -130,6 +135,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/path_provider/ios"
permission_handler:
:path: ".symlinks/plugins/permission_handler/ios"
+ share:
+ :path: ".symlinks/plugins/share/ios"
sqflite:
:path: ".symlinks/plugins/sqflite/ios"
url_launcher:
@@ -140,25 +147,26 @@ SPEC CHECKSUMS:
firebase_core: 91b27774a52f41f8b58484a75edf71197ac01c59
firebase_messaging: caf0273c76e54f0a10dfe5048ac47b89e75bb78a
FirebaseCore: 4d3c72622ce0e2106aaa07bb4b2935ba2c370972
- FirebaseCoreDiagnostics: ee1184d51da3293335b83355aad20f537acc24cf
- FirebaseInstallations: 6e4e77396559bc2ae0504823837ed737b1c7e47f
- FirebaseInstanceID: 5ad92c898e1328b66e8dd58811964d6fe4d334c3
+ FirebaseCoreDiagnostics: 68ad972f99206cef818230f3f3179d52ccfb7f8c
+ FirebaseInstallations: a58d4f72ec5861840b84df489f2668d970df558a
+ FirebaseInstanceID: ad5135045a498d7775903efd39762d2cdfa1be27
FirebaseMessaging: 68d1bcb14880189558a8ae57167abe0b7e417232
Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
flutter_app_badger: 65de4d6f0c34a891df49e6cfb8a1c0496426fa68
flutter_local_notifications: 0c0b1ae97e741e1521e4c1629a459d04b9aec743
flutter_secure_storage: 7953c38a04c3fdbb00571bcd87d8e3b5ceb9daec
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
- GoogleDataTransport: 1024b1a4dfbd7a0e92cb20d7e0a6f1fb66b449a4
- GoogleUtilities: 31c5b01f978a70c6cff2afc6272b3f1921614b43
- nanopb: 59221d7f958fb711001e6a449489542d92ae113e
+ GoogleDataTransport: cd9db2180fcecd8da1b561aea31e3e56cf834aa7
+ GoogleUtilities: e1d9ed4e544fc32a93e00e721400cbc3f377200d
+ nanopb: a0ba3315591a9ae0a16a309ee504766e90db0c96
package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c
permission_handler: 8278954f2382902f63f00dd8828769c0bd6d511b
PromisesObjC: 3113f7f76903778cf4a0586bd1ab89329a0b7b97
+ share: 0b2c3e82132f5888bccca3351c504d0003b3b410
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef
-PODFILE CHECKSUM: a75497545d4391e2d394c3668e20cfb1c2bbd4aa
+PODFILE CHECKSUM: fe0e1ee7f3d1f7d00b11b474b62dd62134535aea
COCOAPODS: 1.10.1
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index 907f9425..a714d6c6 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -486,7 +486,7 @@
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
@@ -547,8 +547,8 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
- CODE_SIGN_IDENTITY = "Apple Development";
- CODE_SIGN_STYLE = Automatic;
+ CODE_SIGN_IDENTITY = "iPhone Distribution";
+ CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 0.1.0;
DEVELOPMENT_TEAM = Z28DW76Y3W;
ENABLE_BITCODE = NO;
@@ -561,7 +561,7 @@
MARKETING_VERSION = 0.1.0;
PRODUCT_BUNDLE_IDENTIFIER = it.notifi.notifi;
PRODUCT_NAME = "$(TARGET_NAME)";
- PROVISIONING_PROFILE_SPECIFIER = "";
+ PROVISIONING_PROFILE_SPECIFIER = "match AppStore it.notifi.notifi";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png
index 14230990..f1123ee6 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/120-2.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/120-2.png
index 6b3fabed..b443e1f0 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/120-2.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/120-2.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png
index 6b3fabed..b443e1f0 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png
index 09af21dc..f93ff0df 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png
index a683cf89..353ef68c 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png
index 38738e85..c5f608ad 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png
index ee5de57c..2d371726 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png
index 507722b4..4f7e438d 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/40-2.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/40-2.png
index 7c7f5f79..81545403 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/40-2.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/40-2.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/40-3.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/40-3.png
index 7c7f5f79..81545403 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/40-3.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/40-3.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png
index 7c7f5f79..81545403 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/58-2.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/58-2.png
index fa83f61e..8aa4e412 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/58-2.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/58-2.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png
index fa83f61e..8aa4e412 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png
index 28b44b2c..92b98a18 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png
index 49da770c..48214f9b 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/80-2.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/80-2.png
index b4afe933..eed7897c 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/80-2.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/80-2.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png
index b4afe933..eed7897c 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png
index ed08cd58..656a7d45 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png differ
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index a140dcc1..59ba6337 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -23,23 +23,23 @@
LSRequiresIPhoneOS
NSAppleMusicUsageDescription
- We don't access apple music
+ We don't access apple music
NSBonjourServices
_dartobservatory._tcp
NSCalendarsUsageDescription
- We don't access your calendar
+ We don't access your calendar
NSContactsUsageDescription
- We don't access your contacts
+ We don't access your contacts
NSLocationAlwaysUsageDescription
- We don't use location data
+ We don't use location data
NSLocationWhenInUseUsageDescription
- We don't use location data
+ We don't use location data
NSMotionUsageDescription
- We don't access motion
+ We don't access motion
NSSpeechRecognitionUsageDescription
- We don't access speech recognition
+ We don't access speech recognition
UIBackgroundModes
fetch
@@ -63,5 +63,9 @@
UIViewControllerBasedStatusBarAppearance
+ BGTaskSchedulerPermittedIdentifiers
+
+ it.notifi.notifi
+
diff --git a/ios/fastlane/Fastfile b/ios/fastlane/Fastfile
index be6b5058..5897ecb7 100644
--- a/ios/fastlane/Fastfile
+++ b/ios/fastlane/Fastfile
@@ -10,36 +10,62 @@
# https://docs.fastlane.tools/plugins/available-plugins
#edit_items.append(EditItem(link_id=link_id, product_id=str(product_id_tag["id"])))
-# Uncomment the line if you want fastlane to automatically update itself
-# update_fastlane
+update_fastlane
default_platform(:ios)
+cocoapods(
+ clean_install: true,
+)
platform :ios do
desc "Upload build to test flight"
lane :tfdeploy do
- build_ios_app(
- export_method: "app-store",
- export_options: {
- provisioningProfiles: {
- "it.notifi.notifi" => "iOS App Store"
- }
- }
+
+ create_keychain(
+ name: "kc",
+ password: "p4ssword",
+ default_keychain: false,
+ unlock: true,
+ timeout: 3600,
+ lock_when_sleeps: false
+ )
+
+ app_store_connect_api_key(
+ key_id: "MK4628AYTK",
+ issuer_id: "69a6de80-d5bc-47e3-e053-5b8c7c11a4d1",
+ key_filepath: "../AuthKey_MK4628AYTK.p8",
+ duration: 1200
+ )
+
+ match(type: "development", readonly: true, keychain_name: "kc", keychain_password: "p4ssword")
+ match(type: "appstore", readonly: true, keychain_name: "kc", keychain_password: "p4ssword")
+
+ build_app(
+ workspace: "Runner.xcworkspace",
+ export_method: "app-store",
+ xcargs: {
+ PROVISIONING_PROFILE_SPECIFIER: ENV["sigh_it.notifi.notifi_appstore"]
+ }
)
upload_to_testflight
end
desc "Upload build to app store"
lane :asdeploy do
- get_push_certificate
+
+ app_store_connect_api_key(
+ key_id: "MK4628AYTK",
+ issuer_id: "69a6de80-d5bc-47e3-e053-5b8c7c11a4d1",
+ key_filepath: "../AuthKey_MK4628AYTK.p8",
+ duration: 1200,
+ )
+
+ match("appstore")
+
build_ios_app(
- export_method: "app-store",
- export_options: {
- provisioningProfiles: {
- "it.notifi.notifi" => "iOS App Store"
- }
- }
+ export_method: "app-store"
)
+
upload_to_app_store
end
end
diff --git a/ios/fastlane/Matchfile b/ios/fastlane/Matchfile
new file mode 100644
index 00000000..e08ae512
--- /dev/null
+++ b/ios/fastlane/Matchfile
@@ -0,0 +1,13 @@
+git_url("https://github.com/maxisme/match")
+
+storage_mode("git")
+
+type("development") # The default type, can be: appstore, adhoc, enterprise or development
+
+# app_identifier(["tools.fastlane.app", "tools.fastlane.app2"])
+# username("user@fastlane.tools") # Your Apple Developer Portal username
+
+# For all available options run `fastlane match --help`
+# Remove the # in the beginning of the line to enable the other options
+
+# The docs are available on https://docs.fastlane.tools/actions/match
diff --git a/lib/notifications/notifications_table.dart b/lib/notifications/notifications_table.dart
index e88458db..a9340526 100644
--- a/lib/notifications/notifications_table.dart
+++ b/lib/notifications/notifications_table.dart
@@ -1,3 +1,5 @@
+import 'dart:io';
+
import 'package:flutter/cupertino.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
@@ -11,6 +13,7 @@ import 'package:notifi/utils/icons.dart';
import 'package:notifi/utils/pallete.dart';
import 'package:notifi/utils/utils.dart';
import 'package:provider/provider.dart';
+import 'package:share/share.dart';
import 'package:toast/toast.dart';
class NotificationTable extends StatefulWidget {
@@ -96,9 +99,13 @@ class NotificationTableState extends State
Container(padding: const EdgeInsets.only(top: 20.0)),
SelectableText(credentials, textAlign: TextAlign.center,
onTap: () {
- Clipboard.setData(ClipboardData(text: credentials));
- Toast.show('Copied $credentials', context,
- gravity: Toast.BOTTOM);
+ if (Platform.isIOS) {
+ Share.share('notifi credentials: $credentials');
+ } else {
+ Clipboard.setData(ClipboardData(text: credentials));
+ Toast.show('Copied $credentials', context,
+ gravity: Toast.BOTTOM);
+ }
},
style: const TextStyle(
color: MyColour.red, fontWeight: FontWeight.w900))
diff --git a/lib/notifications/notifis.dart b/lib/notifications/notifis.dart
index 6ace7a51..ee28ef99 100644
--- a/lib/notifications/notifis.dart
+++ b/lib/notifications/notifis.dart
@@ -50,6 +50,10 @@ class Notifications extends ChangeNotifier {
MenuBarIcon.set('grey');
}
+ if (canBadge) {
+ FlutterAppBadger.updateBadgeCount(cnt);
+ }
+
return cnt;
}
diff --git a/lib/screens/settings.dart b/lib/screens/settings.dart
index 7829ae91..db2ba403 100644
--- a/lib/screens/settings.dart
+++ b/lib/screens/settings.dart
@@ -13,9 +13,10 @@ import 'package:notifi/screens/utils/appbar_title.dart';
import 'package:notifi/user.dart';
import 'package:notifi/utils/icons.dart';
import 'package:notifi/utils/pallete.dart';
-import 'package:notifi/utils/version.dart';
import 'package:notifi/utils/utils.dart';
+import 'package:notifi/utils/version.dart';
import 'package:provider/provider.dart';
+import 'package:share/share.dart';
import 'package:toast/toast.dart';
import 'package:url_launcher/url_launcher.dart';
@@ -77,21 +78,29 @@ class SettingsScreenState extends State {
Consumer(
builder: (BuildContext context, User user, Widget child) {
final String credentials = user.getCredentials();
+
+ SettingOption credentialsSettingWidget = SettingOption(
+ 'Copy Credentials $credentials', Akaricons.clipboard,
+ onTapCallback: () {
+ Clipboard.setData(ClipboardData(text: credentials));
+ showToast('Copied $credentials', context, gravity: Toast.CENTER);
+ });
+ if (Platform.isIOS) {
+ credentialsSettingWidget = SettingOption(
+ 'Share Credentials $credentials', Akaricons.clipboard,
+ onTapCallback: () {
+ Share.share('notifi credentials: $credentials');
+ });
+ }
+
return Column(children: [
Container(padding: const EdgeInsets.only(top: 20.0)),
- if (credentials != null)
- SettingOption(
- 'How Do I Receive Notifications?', Akaricons.question,
- onTapCallback: () async {
- await openUrl('https://notifi.it?c=$credentials#how-to');
- }),
SettingOption(
- 'Copy Credentials $credentials', Akaricons.clipboard,
- onTapCallback: () {
- Clipboard.setData(ClipboardData(text: credentials));
- showToast('Copied $credentials', context,
- gravity: Toast.CENTER);
- })
+ 'How Do I Receive Notifications?', Akaricons.question,
+ onTapCallback: () async {
+ await openUrl('https://notifi.it?c=$credentials#how-to');
+ }),
+ credentialsSettingWidget
]);
}),
SettingOption('Create New Credentials', Akaricons.arrowClockwise,
@@ -247,7 +256,7 @@ class SettingOption extends StatelessWidget {
Widget setting;
if (switchCallback == null) {
setting = Container(
- padding: const EdgeInsets.only(left: 15, right: 15, top: 10),
+ padding: const EdgeInsets.only(top: 10),
child: ElevatedButton(
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all(MyColour.offWhite),
diff --git a/logo/Your_App_Icon.psd b/logo/Your_App_Icon.psd
index 473d7617..2aca6e6f 100644
Binary files a/logo/Your_App_Icon.psd and b/logo/Your_App_Icon.psd differ
diff --git a/logo/after-ps-save.sh b/logo/after-ps-save.sh
index 0ec44a51..e7c7de1d 100644
--- a/logo/after-ps-save.sh
+++ b/logo/after-ps-save.sh
@@ -5,7 +5,9 @@ mv Your_App_Icon-assets/menu.png ../macos/Runner/Assets.xcassets/menu_icon.image
mv Your_App_Icon-assets/menu_red.png ../macos/Runner/Assets.xcassets/red_menu_icon.imageset/
# ios
+# brew install imagemagick
mv Your_App_Icon-assets/AppIcon.appiconset/* ../ios/Runner/Assets.xcassets/AppIcon.appiconset/
+(cd ../ios/Runner/Assets.xcassets/AppIcon.appiconset/ && for file in *.png; do convert -flatten -alpha deactivate $file $file; done)
# flutter
mv Your_App_Icon-assets/sad.png ../images/
diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj
index fe6f2d5a..d3e2eafa 100644
--- a/macos/Runner.xcodeproj/project.pbxproj
+++ b/macos/Runner.xcodeproj/project.pbxproj
@@ -426,16 +426,18 @@
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_STYLE = Manual;
COMBINE_HIDPI_IMAGES = YES;
- DEVELOPMENT_TEAM = Z28DW76Y3W;
- ENABLE_HARDENED_RUNTIME = YES;
+ CURRENT_PROJECT_VERSION = 0.1.1;
+ DEVELOPMENT_TEAM = "";
+ ENABLE_HARDENED_RUNTIME = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.11;
+ MARKETING_VERSION = 0.1.1;
PRODUCT_BUNDLE_IDENTIFIER = it.notifi.notifi;
- PROVISIONING_PROFILE_SPECIFIER = "it.notifi.notifi AppStore";
+ PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_VERSION = 5.0;
};
name = Profile;
@@ -527,9 +529,10 @@
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CODE_SIGN_IDENTITY = "-";
+ CODE_SIGN_IDENTITY = "";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_HARDENED_RUNTIME = YES;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -557,16 +560,18 @@
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_STYLE = Manual;
COMBINE_HIDPI_IMAGES = YES;
- DEVELOPMENT_TEAM = Z28DW76Y3W;
- ENABLE_HARDENED_RUNTIME = YES;
+ CURRENT_PROJECT_VERSION = 0.1.1;
+ DEVELOPMENT_TEAM = "";
+ ENABLE_HARDENED_RUNTIME = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.11;
+ MARKETING_VERSION = 0.1.1;
PRODUCT_BUNDLE_IDENTIFIER = it.notifi.notifi;
- PROVISIONING_PROFILE_SPECIFIER = "it.notifi.notifi AppStore";
+ PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
};
@@ -582,15 +587,18 @@
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_STYLE = Manual;
COMBINE_HIDPI_IMAGES = YES;
- DEVELOPMENT_TEAM = Z28DW76Y3W;
+ CURRENT_PROJECT_VERSION = 0.1.1;
+ DEVELOPMENT_TEAM = "";
+ ENABLE_HARDENED_RUNTIME = YES;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.11;
+ MARKETING_VERSION = 0.1.1;
PRODUCT_BUNDLE_IDENTIFIER = it.notifi.notifi;
- PROVISIONING_PROFILE_SPECIFIER = "it.notifi.notifi AppStore";
+ PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_VERSION = 5.0;
};
name = Release;
diff --git a/macos/Runner/AnimateMenuIcon.swift b/macos/Runner/AnimateMenuIcon.swift
index f52fbba9..b52382a6 100644
--- a/macos/Runner/AnimateMenuIcon.swift
+++ b/macos/Runner/AnimateMenuIcon.swift
@@ -29,6 +29,7 @@ class Animater {
@objc func _animateBell() {
let icon = NSImage(named: .red)
icon?.size = menuImageSize
+ icon?.isTemplate = false
let angle = String(angles.popLast() ?? "")
if angle != "" {
diff --git a/macos/Runner/AppDelegate.swift b/macos/Runner/AppDelegate.swift
index 0b1340df..39d04907 100644
--- a/macos/Runner/AppDelegate.swift
+++ b/macos/Runner/AppDelegate.swift
@@ -22,7 +22,6 @@ class AppDelegate: FlutterAppDelegate {
if let button = statusBarItem.button {
let image = NSImage(named: .red)
- image?.isTemplate = true
image?.size = menuImageSize
button.image = image
button.action = #selector(togglePopover(_:))
@@ -41,10 +40,13 @@ class AppDelegate: FlutterAppDelegate {
switch call.method {
case "red_menu_icon":
menu_image = NSImage(named: .red)
+ menu_image?.isTemplate = false
case "grey_menu_icon":
menu_image = NSImage(named: .grey)
+ menu_image?.isTemplate = true
case "error_menu_icon":
menu_image = NSImage(named: .error)
+ menu_image?.isTemplate = true
case "animate":
if let button = self.statusBarItem.button {
if menuBarAnimater != nil {
@@ -66,7 +68,6 @@ class AppDelegate: FlutterAppDelegate {
if (menu_image != nil) {
if let button = statusBarItem.button {
menu_image?.size = menuImageSize
- menu_image?.isTemplate = true
button.image = menu_image
result(0) // success
}
diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/128.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/128.png
index bab1f592..0826fe2d 100644
Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/128.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/128.png differ
diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/128@2x.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/128@2x.png
index faab2290..e68f9f6b 100644
Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/128@2x.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/128@2x.png differ
diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/16.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/16.png
index 3c51fbe0..9da6f4ef 100644
Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/16.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/16.png differ
diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/16@2x.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/16@2x.png
index 9d8e60e2..c8b0ed59 100644
Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/16@2x.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/16@2x.png differ
diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/256.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/256.png
index faab2290..e68f9f6b 100644
Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/256.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/256.png differ
diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/256@2x.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/256@2x.png
index 1591d68f..57ef9412 100644
Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/256@2x.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/256@2x.png differ
diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/32.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/32.png
index 9d8e60e2..c8b0ed59 100644
Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/32.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/32.png differ
diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/32@2x.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/32@2x.png
index ed26e63e..d748f6ba 100644
Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/32@2x.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/32@2x.png differ
diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/512.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/512.png
index 1591d68f..57ef9412 100644
Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/512.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/512.png differ
diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/512@2x.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/512@2x.png
index f321fd89..8f50a9f4 100644
Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/512@2x.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/512@2x.png differ
diff --git a/macos/Runner/Assets.xcassets/menu_error_icon.imageset/error_menu.png b/macos/Runner/Assets.xcassets/menu_error_icon.imageset/error_menu.png
index 5dda2e37..37724fc9 100644
Binary files a/macos/Runner/Assets.xcassets/menu_error_icon.imageset/error_menu.png and b/macos/Runner/Assets.xcassets/menu_error_icon.imageset/error_menu.png differ
diff --git a/macos/Runner/Assets.xcassets/menu_icon.imageset/menu.png b/macos/Runner/Assets.xcassets/menu_icon.imageset/menu.png
index d1e18370..a7306fbd 100644
Binary files a/macos/Runner/Assets.xcassets/menu_icon.imageset/menu.png and b/macos/Runner/Assets.xcassets/menu_icon.imageset/menu.png differ
diff --git a/macos/Runner/Assets.xcassets/red_menu_icon.imageset/menu_red.png b/macos/Runner/Assets.xcassets/red_menu_icon.imageset/menu_red.png
index 2d639584..81dc6cd0 100644
Binary files a/macos/Runner/Assets.xcassets/red_menu_icon.imageset/menu_red.png and b/macos/Runner/Assets.xcassets/red_menu_icon.imageset/menu_red.png differ
diff --git a/macos/Runner/Info.plist b/macos/Runner/Info.plist
index a7d3ded3..5d37d88c 100644
--- a/macos/Runner/Info.plist
+++ b/macos/Runner/Info.plist
@@ -17,9 +17,9 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- $(FLUTTER_BUILD_NAME)
+ $(MARKETING_VERSION)
CFBundleVersion
- $(FLUTTER_BUILD_NUMBER)
+ $(CURRENT_PROJECT_VERSION)
LSApplicationCategoryType
public.app-category.developer-tools
LSMinimumSystemVersion
diff --git a/macos/Runner/Release.entitlements b/macos/Runner/Release.entitlements
index 7a2230dc..c4e18f26 100644
--- a/macos/Runner/Release.entitlements
+++ b/macos/Runner/Release.entitlements
@@ -4,6 +4,18 @@
com.apple.security.app-sandbox
+ com.apple.security.cs.allow-dyld-environment-variables
+
+ com.apple.security.cs.allow-jit
+
+ com.apple.security.cs.allow-unsigned-executable-memory
+
+ com.apple.security.cs.debugger
+
+ com.apple.security.cs.disable-executable-page-protection
+
+ com.apple.security.cs.disable-library-validation
+
com.apple.security.network.client
com.apple.security.network.server
diff --git a/macos/fastlane/Fastfile b/macos/fastlane/Fastfile
index efe021e0..ce857572 100644
--- a/macos/fastlane/Fastfile
+++ b/macos/fastlane/Fastfile
@@ -13,22 +13,67 @@
# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane
-
+team_id("Z28DW76Y3W")
default_platform(:mac)
platform :mac do
- desc "Upload build to test flight"
+ lane :keychain do
+
+ create_keychain(
+ name: "kc",
+ password: "p4ssword",
+ default_keychain: false,
+ unlock: true,
+ timeout: 3600,
+ lock_when_sleeps: false
+ )
+
+ app_store_connect_api_key(
+ key_id: "MK4628AYTK",
+ issuer_id: "69a6de80-d5bc-47e3-e053-5b8c7c11a4d1",
+ key_filepath: "../AuthKey_MK4628AYTK.p8",
+ duration: 1200
+ )
+
+ begin
+ match(type: "mac_installer_distribution", keychain_name: "kc", keychain_password: "p4ssword")
+ rescue => ex
+ UI.error(ex)
+ end
+ match(keychain_name: "kc", keychain_password: "p4ssword")
+
+ end
+
+
lane :build do
+ create_keychain(
+ name: "my-keychain2",
+ password: "p4ssword",
+ default_keychain: false,
+ unlock: true,
+ timeout: 3600,
+ lock_when_sleeps: false
+ )
+
+ app_store_connect_api_key(
+ key_id: "MK4628AYTK",
+ issuer_id: "69a6de80-d5bc-47e3-e053-5b8c7c11a4d1",
+ key_filepath: "../AuthKey_MK4628AYTK.p8",
+ duration: 1200
+ )
+
+ match(type: "mac_installer_distribution", keychain_name: "my-keychain2", keychain_password: "p4ssword")
+
+
# https://docs.fastlane.tools/actions/build_mac_app/
build_mac_app(
- export_method: "mac-application",
export_options: {
- provisioningProfiles: {
- "it.notifi.notifi" => "it.notifi.notifi AppStore"
- }
+ method: "app-store",
},
- output_name: "notifi.ipa"
+ export_team_id: CredentialsManager::AppfileConfig.try_fetch_value(:team_id)
)
+
+ upload_to_app_store
end
end
diff --git a/macos/fastlane/Matchfile b/macos/fastlane/Matchfile
new file mode 100644
index 00000000..e08ae512
--- /dev/null
+++ b/macos/fastlane/Matchfile
@@ -0,0 +1,13 @@
+git_url("https://github.com/maxisme/match")
+
+storage_mode("git")
+
+type("development") # The default type, can be: appstore, adhoc, enterprise or development
+
+# app_identifier(["tools.fastlane.app", "tools.fastlane.app2"])
+# username("user@fastlane.tools") # Your Apple Developer Portal username
+
+# For all available options run `fastlane match --help`
+# Remove the # in the beginning of the line to enable the other options
+
+# The docs are available on https://docs.fastlane.tools/actions/match
diff --git a/macos/fastlane/README.md b/macos/fastlane/README.md
index 2db1cba6..eb8d3771 100644
--- a/macos/fastlane/README.md
+++ b/macos/fastlane/README.md
@@ -16,11 +16,16 @@ or alternatively using `brew install fastlane`
# Available Actions
## Mac
+### mac keychain
+```
+fastlane mac keychain
+```
+
### mac build
```
fastlane mac build
```
-Upload build to test flight
+
----
diff --git a/plugins/url_launcher_linux/cmake_install.cmake b/plugins/url_launcher_linux/cmake_install.cmake
deleted file mode 100644
index 769164b8..00000000
--- a/plugins/url_launcher_linux/cmake_install.cmake
+++ /dev/null
@@ -1,39 +0,0 @@
-# Install script for directory: /home/maximilian/Documents/work/notifi/linux/flutter/ephemeral/.plugin_symlinks/url_launcher_linux/linux
-
-# Set the install prefix
-if(NOT DEFINED CMAKE_INSTALL_PREFIX)
- set(CMAKE_INSTALL_PREFIX "/home/maximilian/Documents/work/notifi/bundle")
-endif()
-string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
-
-# Set the install configuration name.
-if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
- if(BUILD_TYPE)
- string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
- CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
- else()
- set(CMAKE_INSTALL_CONFIG_NAME "Debug")
- endif()
- message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
-endif()
-
-# Set the component getting installed.
-if(NOT CMAKE_INSTALL_COMPONENT)
- if(COMPONENT)
- message(STATUS "Install component: \"${COMPONENT}\"")
- set(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
- else()
- set(CMAKE_INSTALL_COMPONENT)
- endif()
-endif()
-
-# Install shared libraries without execute permission?
-if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
- set(CMAKE_INSTALL_SO_NO_EXE "1")
-endif()
-
-# Is this installation the result of a crosscompile?
-if(NOT DEFINED CMAKE_CROSSCOMPILING)
- set(CMAKE_CROSSCOMPILING "FALSE")
-endif()
-
diff --git a/pubspec.lock b/pubspec.lock
index 62c305d8..b5cf3c9a 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -56,14 +56,14 @@ packages:
name: build_config
url: "https://pub.dartlang.org"
source: hosted
- version: "0.4.6"
+ version: "0.4.7"
cached_network_image:
dependency: "direct main"
description:
name: cached_network_image
url: "https://pub.dartlang.org"
source: hosted
- version: "2.5.0"
+ version: "2.5.1"
characters:
dependency: transitive
description:
@@ -236,7 +236,7 @@ packages:
name: flutter_cache_manager
url: "https://pub.dartlang.org"
source: hosted
- version: "2.1.1"
+ version: "2.1.2"
flutter_dotenv:
dependency: "direct main"
description:
@@ -257,7 +257,7 @@ packages:
name: flutter_local_notifications
url: "https://pub.dartlang.org"
source: hosted
- version: "4.0.1+1"
+ version: "4.0.1+2"
flutter_local_notifications_platform_interface:
dependency: transitive
description:
@@ -304,7 +304,7 @@ packages:
name: glob
url: "https://pub.dartlang.org"
source: hosted
- version: "2.0.0"
+ version: "2.0.1"
http:
dependency: transitive
description:
@@ -346,7 +346,7 @@ packages:
name: json_annotation
url: "https://pub.dartlang.org"
source: hosted
- version: "4.0.0"
+ version: "4.0.1"
json_serializable:
dependency: "direct main"
description:
@@ -374,7 +374,7 @@ packages:
name: logging
url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.0"
+ version: "1.0.1"
matcher:
dependency: transitive
description:
@@ -389,6 +389,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
+ mime:
+ dependency: transitive
+ description:
+ name: mime
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.0.0"
nested:
dependency: transitive
description:
@@ -430,7 +437,7 @@ packages:
name: path_provider
url: "https://pub.dartlang.org"
source: hosted
- version: "1.6.27"
+ version: "1.6.28"
path_provider_linux:
dependency: transitive
description:
@@ -507,7 +514,7 @@ packages:
name: process
url: "https://pub.dartlang.org"
source: hosted
- version: "4.1.0"
+ version: "4.2.1"
provider:
dependency: "direct main"
description:
@@ -557,6 +564,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.4"
+ share:
+ dependency: "direct main"
+ description:
+ name: share
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.0.1"
sky_engine:
dependency: transitive
description: flutter
@@ -589,7 +603,7 @@ packages:
name: sqflite_common
url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.3+1"
+ version: "1.0.3+3"
stack_trace:
dependency: transitive
description:
@@ -736,7 +750,7 @@ packages:
name: win32
url: "https://pub.dartlang.org"
source: hosted
- version: "2.0.0"
+ version: "2.0.5"
xdg_directories:
dependency: transitive
description:
diff --git a/pubspec.yaml b/pubspec.yaml
index 32c7a442..9e820b20 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -45,6 +45,7 @@ dependencies:
package_info: ^2.0.0
path_provider: ^1.6.27
provider: ^5.0.0
+ share: ^2.0.1
sqflite: ^1.3.2+3
timeago: ^3.0.2
toast: ^0.1.5
diff --git a/test/golden-asserts/screen/settings.png b/test/golden-asserts/screen/settings.png
index 8eca86a1..656f5906 100644
Binary files a/test/golden-asserts/screen/settings.png and b/test/golden-asserts/screen/settings.png differ