diff --git a/.github/workflows/build_firebase.yml b/.github/workflows/build_firebase.yml new file mode 100644 index 0000000..54507a4 --- /dev/null +++ b/.github/workflows/build_firebase.yml @@ -0,0 +1,44 @@ +# This workflow will build a Swift project +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-swift + +name: Build Firebase + +on: + workflow_dispatch: + +jobs: + build_firebase: + name: Build Firebase + runs-on: macos-latest + + steps: + - name: Xcode Select Version + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: '14.1' + + - name: Checkout Branch + uses: actions/checkout@v2 + + - name: Install Bundle Dependency + run: | + bundle install + + - name: Install XcodeGen + run: | + brew install xcodegen + + - name: Build IPA and Upload to Firebase using Fastlane + env: + FIREBASE_APP_ID: ${{ vars.FIREBASE_APP_ID }} + FIREBASE_TOKEN: ${{ vars.FIREBASE_TOKEN }} + MATCH_GIT_BASIC_AUTHORIZATION: ${{ vars.MATCH_GIT_BASIC_AUTHORIZATION }} + MATCH_KEYCHAIN: ${{ vars.MATCH_KEYCHAIN }} + MATCH_PASSWORD: ${{ vars.MATCH_PASSWORD }} + DISCORD_WEBHOOK_URL: ${{ vars.DISCORD_WEBHOOK_URL }} + BUILD_NUMBER: ${{ github.run_number }} + WORKFLOW_NAME: ${{ github.workflow }} + BRANCH_NAME: ${{ github.ref_name }} + COMMIT_SHA: ${{ github.sha }} + run: | + bundle exec fastlane build_firebase \ No newline at end of file diff --git a/.github/workflows/build_testflight.yml b/.github/workflows/build_testflight.yml new file mode 100644 index 0000000..e1a7142 --- /dev/null +++ b/.github/workflows/build_testflight.yml @@ -0,0 +1,47 @@ +# This workflow will build a Swift project +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-swift + +name: Build TestFlight + +on: + workflow_dispatch: + +jobs: + build_testflight: + name: Build TestFlight + runs-on: macos-latest + + steps: + - name: Xcode Select Version + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: '14.1' + + - name: Checkout Branch + uses: actions/checkout@v2 + + - name: Install Bundle Dependency + run: | + bundle install + + - name: Install XcodeGen + run: | + brew install xcodegen + + - name: Build IPA and Upload to TestFlight using Fastlane + env: + APP_STORE_CONNECT_API_KEY_IN_HOUSE: ${{ vars.APP_STORE_CONNECT_API_KEY_IN_HOUSE }} + APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ vars.APP_STORE_CONNECT_API_KEY_ISSUER_ID }} + APP_STORE_CONNECT_API_KEY_IS_KEY_CONTENT_BASE64: ${{ vars.APP_STORE_CONNECT_API_KEY_IS_KEY_CONTENT_BASE64 }} + APP_STORE_CONNECT_API_KEY_KEY: ${{ vars.APP_STORE_CONNECT_API_KEY_KEY }} + APP_STORE_CONNECT_API_KEY_KEY_ID: ${{ vars.APP_STORE_CONNECT_API_KEY_KEY_ID }} + MATCH_GIT_BASIC_AUTHORIZATION: ${{ vars.MATCH_GIT_BASIC_AUTHORIZATION }} + MATCH_KEYCHAIN: ${{ vars.MATCH_KEYCHAIN }} + MATCH_PASSWORD: ${{ vars.MATCH_PASSWORD }} + DISCORD_WEBHOOK_URL: ${{ vars.DISCORD_WEBHOOK_URL }} + BUILD_NUMBER: ${{ github.run_number }} + WORKFLOW_NAME: ${{ github.workflow }} + BRANCH_NAME: ${{ github.ref_name }} + COMMIT_SHA: ${{ github.sha }} + run: | + bundle exec fastlane build_testflight \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..271299b --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,38 @@ +# Contribution Guidelines + +We welcome and appreciate contributions to Scandocs! Whether you want to report a bug, propose a new feature, or submit a fix, your help is invaluable. + +## How to Contribute + +### Reporting Issues + +If you encounter any issues or have suggestions for improvement, please [open an issue](https://github.com/rickirby/scandocs/issues/new) on this repository. Make sure to include: + +- A clear and descriptive title. +- Details about the problem or enhancement you are suggesting. +- Steps to reproduce (if applicable). +- Screenshots or code snippets (if relevant). + +### Pull Requests + +We encourage you to contribute directly by submitting pull requests. + +1. Fork the repository to your GitHub account. +2. Clone your fork to your local machine: `git clone https://github.com/your-username/scandocs.git` +3. Create a new branch for your changes: `git checkout -b feature/your-feature` or `git checkout -b bugfix/your-bug-fix` +4. Make your changes and commit: `git commit -m "Description of your changes"` +5. Push the branch to your fork: `git push origin feature/your-feature` +6. Open a pull request (PR) against the `development` branch on this repository. + +Please ensure that your pull request: + +- Includes a clear title and description of the changes. +- References the related issue (if applicable). +- Follows the coding style and conventions used in the project. +- Has a well-documented code and, if applicable, includes tests. + +## License + +By contributing to Scandocs, you agree that your contributions will be licensed under the [MIT License](LICENSE). + +Thank you for contributing to Scandocs! diff --git a/Configuration/AdHoc.xcconfig b/Configuration/AdHoc.xcconfig index 0f24b42..9cc3c7b 100644 --- a/Configuration/AdHoc.xcconfig +++ b/Configuration/AdHoc.xcconfig @@ -10,13 +10,15 @@ APP_NAME = Scandocs (AdHoc) BUNDLE_ID = com.scandocs.ios +APP_PROVISIONING_PROFILE = match AdHoc com.scandocs.ios +CODE_SIGN_IDENTITY = Apple Distribution: Ricki Bin Yamin (6NMANHT3A2) VALIDATE_PRODUCT = NO DEBUG_INFORMATION_FORMAT = dwarf-with-dsym TARGETED_DEVICE_FAMILY = 1 IPHONEOS_DEPLOYMENT_TARGET = 15.0 BUILD_NUMBER = 1 VERSION_NAME = 1.0.0 -CODE_SIGN_STYLE = Automatic +CODE_SIGN_STYLE = Manual DEVELOPMENT_TEAM = 6NMANHT3A2 SWIFT_OPTIMIZATION_LEVEL = -O SWIFT_VERSION = 5.0 diff --git a/Configuration/Development.xcconfig b/Configuration/Development.xcconfig index 913d690..4e086a0 100644 --- a/Configuration/Development.xcconfig +++ b/Configuration/Development.xcconfig @@ -10,13 +10,15 @@ APP_NAME = Scandocs (Development) BUNDLE_ID = com.scandocs.ios +APP_PROVISIONING_PROFILE = match Development com.scandocs.ios +CODE_SIGN_IDENTITY = Apple Development: Ricki Bin Yamin (BWBZZ27H86) VALIDATE_PRODUCT = NO DEBUG_INFORMATION_FORMAT = dwarf TARGETED_DEVICE_FAMILY = 1 IPHONEOS_DEPLOYMENT_TARGET = 15.0 BUILD_NUMBER = 1 VERSION_NAME = 1.0.0 -CODE_SIGN_STYLE = Automatic +CODE_SIGN_STYLE = Manual DEVELOPMENT_TEAM = 6NMANHT3A2 SWIFT_OPTIMIZATION_LEVEL = -Onone SWIFT_VERSION = 5.0 diff --git a/Configuration/Release.xcconfig b/Configuration/Release.xcconfig index fddfc74..dab673d 100644 --- a/Configuration/Release.xcconfig +++ b/Configuration/Release.xcconfig @@ -10,13 +10,15 @@ APP_NAME = Scandocs BUNDLE_ID = com.scandocs.ios +APP_PROVISIONING_PROFILE = match AppStore com.scandocs.ios +CODE_SIGN_IDENTITY = Apple Distribution: Ricki Bin Yamin (6NMANHT3A2) VALIDATE_PRODUCT = YES DEBUG_INFORMATION_FORMAT = dwarf-with-dsym TARGETED_DEVICE_FAMILY = 1 IPHONEOS_DEPLOYMENT_TARGET = 15.0 BUILD_NUMBER = 1 VERSION_NAME = 1.0.0 -CODE_SIGN_STYLE = Automatic +CODE_SIGN_STYLE = Manual DEVELOPMENT_TEAM = 6NMANHT3A2 SWIFT_OPTIMIZATION_LEVEL = -O SWIFT_VERSION = 5.0 diff --git a/Fastlane/Appfile b/Fastlane/Appfile new file mode 100644 index 0000000..6cac0de --- /dev/null +++ b/Fastlane/Appfile @@ -0,0 +1,6 @@ +app_identifier("com.scandocs.ios") # The bundle identifier of your app +apple_id("ricki.bin.yamin@gmail.com") # Your Apple Developer Portal username + + +# For more information about the Appfile, see: +# https://docs.fastlane.tools/advanced/#appfile \ No newline at end of file diff --git a/Fastlane/Fastfile b/Fastlane/Fastfile new file mode 100644 index 0000000..c4467a9 --- /dev/null +++ b/Fastlane/Fastfile @@ -0,0 +1,199 @@ +# This file contains the fastlane.tools configuration +# You can find the documentation at https://docs.fastlane.tools +# +# For a list of all available actions, check out +# +# https://docs.fastlane.tools/actions +# +# For a list of all available plugins, check out +# +# https://docs.fastlane.tools/plugins/available-plugins +# + +# Uncomment the line if you want fastlane to automatically update itself +# update_fastlane + +default_platform(:ios) + +platform :ios do + + desc "Setup CI Keychain to prevent stack due to default keychain locked" + lane :setupCIKeychain do + create_keychain( + name: ENV["MATCH_KEYCHAIN"], + password: ENV["MATCH_PASSWORD"], + default_keychain: true, + unlock: true, + timeout: 3600, + add_to_search_list: true, + verbose: true + ) + end + + desc "Preparing Certificate and Provisioning Profiles on New Device Setup" + lane :prepare do + match( + app_identifier: "com.scandocs.ios", + type: "development", + readonly: true + ) + + match( + app_identifier: "com.scandocs.ios", + type: "adhoc", + readonly: true + ) + + match( + app_identifier: "com.scandocs.ios", + type: "appstore", + readonly: true + ) + end + + desc "Build TestFlight" + lane :build_testflight do + build_number = ENV["BUILD_NUMBER"] + + UI.message("Change build number to #{build_number}") + sh("cd .. && ./Tooling/change_build_number.sh #{build_number}") + + UI.message("Setup Project") + sh("cd .. && ./setup.sh") + + UI.message("Setup Custom Keychain") + setupCIKeychain + + UI.message("Prepare Provisioning Profiles") + match( + keychain_name: ENV["MATCH_KEYCHAIN"] || "login.keychain", + keychain_password: ENV["MATCH_PASSWORD"] || "", + app_identifier: "com.scandocs.ios", + type: "appstore", + readonly: true + ) + + UI.message("Build IPA") + build_app( + workspace: "Scandocs.xcworkspace", + scheme: "Scandocs", + configuration: "Release", + export_method: "app-store", + export_options: { + iCloudContainerEnvironment: "Production" + } + ) + + app_store_connect_api_key + + UI.message("Upload to TestFlight") + upload_to_testflight( + skip_waiting_for_build_processing: true, + skip_submission: true + ) + + notifySuccessBuild( + destination: "TestFlight" + ) + end + + desc "Build Firebase" + lane :build_firebase do + build_number = ENV["BUILD_NUMBER"] + + UI.message("Change build number to #{build_number}") + sh("cd .. && ./Tooling/change_build_number.sh #{build_number}") + + UI.message("Setup Project") + sh("cd .. && ./setup.sh") + + UI.message("Setup Custom Keychain") + setupCIKeychain + + UI.message("Prepare Provisioning Profiles") + match( + keychain_name: ENV["MATCH_KEYCHAIN"] || "login.keychain", + keychain_password: ENV["MATCH_PASSWORD"] || "", + app_identifier: "com.scandocs.ios", + type: "adhoc", + readonly: true + ) + + UI.message("Build IPA") + build_app( + workspace: "Scandocs.xcworkspace", + scheme: "Scandocs", + configuration: "AdHoc", + export_method: "ad-hoc", + export_options: { + iCloudContainerEnvironment: "Development" + } + ) + + UI.message("Upload to Firebase") + firebase_app_distribution( + app: ENV["FIREBASE_APP_ID"], + release_notes: ENV["BRANCH_NAME"], + groups: "self-tester", + firebase_cli_token: ENV["FIREBASE_TOKEN"] + ) + + notifySuccessBuild( + destination: "Firebase" + ) + end + + desc "Send success message to Discord" + lane :notifySuccessBuild do |options| + destination = options[:destination] + + discord_notifier( + webhook_url: ENV["DISCORD_WEBHOOK_URL"], + success: true, + title: "#{destination}", + description: "Apps has been successfully uploaded to #{destination} 🎉", + fields:[ + { + name: "Build Number", + value: ENV["BUILD_NUMBER"] || "-" + }, + { + name: "Git Branch", + value: ENV["BRANCH_NAME"] || "-" + }, + { + name: "Git Commit", + value: ENV["COMMIT_SHA"] || "-" + } + ] + ) + end + + desc "Send error message to Discord" + error do |lane, exception| + discord_notifier( + webhook_url: ENV["DISCORD_WEBHOOK_URL"], + success: false, + title: "Error 💥", + description: "Encountered error from Workflow `#{ENV["GITHUB_WORKFLOW"]}` on lane `#{lane}`.", + fields:[ + { + name: "Build Number", + value: ENV["BUILD_NUMBER"] || "local build" + }, + { + name: "Git Branch", + value: ENV["BRANCH_NAME"] || "-" + }, + { + name: "Git Commit", + value: ENV["COMMIT_SHA"] || "-" + }, + { + name: "Error Message", + value: exception + } + ] + ) + end +end diff --git a/Fastlane/Matchfile b/Fastlane/Matchfile new file mode 100644 index 0000000..3442aab --- /dev/null +++ b/Fastlane/Matchfile @@ -0,0 +1,13 @@ +git_url("https://github.com/rickirby/scandocs_certificate.git") + +storage_mode("git") + +type("appstore") # The default type, can be: appstore, adhoc, enterprise or development + +app_identifier("com.scandocs.ios") +username("ricki.bin.yamin@gmail.com") # 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/Fastlane/Pluginfile b/Fastlane/Pluginfile new file mode 100644 index 0000000..7de1c51 --- /dev/null +++ b/Fastlane/Pluginfile @@ -0,0 +1,6 @@ +# Autogenerated by fastlane +# +# Ensure this file is checked in to source control! + +gem 'fastlane-plugin-discord_notifier' +gem 'fastlane-plugin-firebase_app_distribution' \ No newline at end of file diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..65c717c --- /dev/null +++ b/Gemfile @@ -0,0 +1,6 @@ +source "https://rubygems.org" + +gem "fastlane" +gem "cocoapods" +plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') +eval_gemfile(plugins_path) if File.exist?(plugins_path) \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..d15526d --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,317 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.6) + rexml + activesupport (5.2.8.1) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 0.7, < 2) + minitest (~> 5.1) + tzinfo (~> 1.1) + addressable (2.8.5) + public_suffix (>= 2.0.2, < 6.0) + algoliasearch (1.27.5) + httpclient (~> 2.8, >= 2.8.3) + json (>= 1.5.1) + artifactory (3.0.15) + atomos (0.1.3) + aws-eventstream (1.2.0) + aws-partitions (1.845.0) + aws-sdk-core (3.186.0) + aws-eventstream (~> 1, >= 1.0.2) + aws-partitions (~> 1, >= 1.651.0) + aws-sigv4 (~> 1.5) + jmespath (~> 1, >= 1.6.1) + aws-sdk-kms (1.72.0) + aws-sdk-core (~> 3, >= 3.184.0) + aws-sigv4 (~> 1.1) + aws-sdk-s3 (1.136.0) + aws-sdk-core (~> 3, >= 3.181.0) + aws-sdk-kms (~> 1) + aws-sigv4 (~> 1.6) + aws-sigv4 (1.6.1) + aws-eventstream (~> 1, >= 1.0.2) + babosa (1.0.4) + claide (1.1.0) + cocoapods (1.10.2) + addressable (~> 2.6) + claide (>= 1.0.2, < 2.0) + cocoapods-core (= 1.10.2) + cocoapods-deintegrate (>= 1.0.3, < 2.0) + cocoapods-downloader (>= 1.4.0, < 2.0) + cocoapods-plugins (>= 1.0.0, < 2.0) + cocoapods-search (>= 1.0.0, < 2.0) + cocoapods-trunk (>= 1.4.0, < 2.0) + cocoapods-try (>= 1.1.0, < 2.0) + colored2 (~> 3.1) + escape (~> 0.0.4) + fourflusher (>= 2.3.0, < 3.0) + gh_inspector (~> 1.0) + molinillo (~> 0.6.6) + nap (~> 1.0) + ruby-macho (~> 1.4) + xcodeproj (>= 1.19.0, < 2.0) + cocoapods-core (1.10.2) + activesupport (> 5.0, < 6) + addressable (~> 2.6) + algoliasearch (~> 1.0) + concurrent-ruby (~> 1.1) + fuzzy_match (~> 2.0.4) + nap (~> 1.0) + netrc (~> 0.11) + public_suffix + typhoeus (~> 1.0) + cocoapods-deintegrate (1.0.5) + cocoapods-downloader (1.6.3) + cocoapods-plugins (1.0.0) + nap + cocoapods-search (1.0.1) + cocoapods-trunk (1.6.0) + nap (>= 0.8, < 2.0) + netrc (~> 0.11) + cocoapods-try (1.2.0) + colored (1.2) + colored2 (3.1.2) + commander (4.6.0) + highline (~> 2.0.0) + concurrent-ruby (1.2.2) + declarative (0.0.20) + digest-crc (0.6.5) + rake (>= 12.0.0, < 14.0.0) + discordrb (3.3.0) + discordrb-webhooks (~> 3.3.0) + ffi (>= 1.9.24) + opus-ruby + rbnacl (~> 3.4.0) + rest-client (>= 2.1.0.rc1) + websocket-client-simple (>= 0.3.0) + discordrb-webhooks (3.3.0) + rest-client (>= 2.1.0.rc1) + domain_name (0.5.20190701) + unf (>= 0.0.5, < 1.0.0) + dotenv (2.8.1) + emoji_regex (3.2.3) + escape (0.0.4) + ethon (0.16.0) + ffi (>= 1.15.0) + event_emitter (0.2.6) + excon (0.104.0) + faraday (1.10.3) + faraday-em_http (~> 1.0) + faraday-em_synchrony (~> 1.0) + faraday-excon (~> 1.1) + faraday-httpclient (~> 1.0) + faraday-multipart (~> 1.0) + faraday-net_http (~> 1.0) + faraday-net_http_persistent (~> 1.0) + faraday-patron (~> 1.0) + faraday-rack (~> 1.0) + faraday-retry (~> 1.0) + ruby2_keywords (>= 0.0.4) + faraday-cookie_jar (0.0.7) + faraday (>= 0.8.0) + http-cookie (~> 1.0.0) + faraday-em_http (1.0.0) + faraday-em_synchrony (1.0.0) + faraday-excon (1.1.0) + faraday-httpclient (1.0.1) + faraday-multipart (1.0.4) + multipart-post (~> 2) + faraday-net_http (1.0.1) + faraday-net_http_persistent (1.2.0) + faraday-patron (1.0.0) + faraday-rack (1.0.0) + faraday-retry (1.0.3) + faraday_middleware (1.2.0) + faraday (~> 1.0) + fastimage (2.2.7) + fastlane (2.216.0) + CFPropertyList (>= 2.3, < 4.0.0) + addressable (>= 2.8, < 3.0.0) + artifactory (~> 3.0) + aws-sdk-s3 (~> 1.0) + babosa (>= 1.0.3, < 2.0.0) + bundler (>= 1.12.0, < 3.0.0) + colored + commander (~> 4.6) + dotenv (>= 2.1.1, < 3.0.0) + emoji_regex (>= 0.1, < 4.0) + excon (>= 0.71.0, < 1.0.0) + faraday (~> 1.0) + faraday-cookie_jar (~> 0.0.6) + faraday_middleware (~> 1.0) + fastimage (>= 2.1.0, < 3.0.0) + gh_inspector (>= 1.1.2, < 2.0.0) + google-apis-androidpublisher_v3 (~> 0.3) + google-apis-playcustomapp_v1 (~> 0.1) + google-cloud-storage (~> 1.31) + highline (~> 2.0) + http-cookie (~> 1.0.5) + json (< 3.0.0) + jwt (>= 2.1.0, < 3) + mini_magick (>= 4.9.4, < 5.0.0) + multipart-post (>= 2.0.0, < 3.0.0) + naturally (~> 2.2) + optparse (~> 0.1.1) + plist (>= 3.1.0, < 4.0.0) + rubyzip (>= 2.0.0, < 3.0.0) + security (= 0.1.3) + simctl (~> 1.6.3) + terminal-notifier (>= 2.0.0, < 3.0.0) + terminal-table (~> 3) + tty-screen (>= 0.6.3, < 1.0.0) + tty-spinner (>= 0.8.0, < 1.0.0) + word_wrap (~> 1.0.0) + xcodeproj (>= 1.13.0, < 2.0.0) + xcpretty (~> 0.3.0) + xcpretty-travis-formatter (>= 0.0.3) + fastlane-plugin-discord_notifier (0.1.7) + discordrb (~> 3.3.0) + fastlane-plugin-firebase_app_distribution (0.7.4) + google-apis-firebaseappdistribution_v1 (~> 0.3.0) + ffi (1.16.3) + fourflusher (2.3.1) + fuzzy_match (2.0.4) + gh_inspector (1.1.3) + google-apis-androidpublisher_v3 (0.51.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-core (0.11.2) + addressable (~> 2.5, >= 2.5.1) + googleauth (>= 0.16.2, < 2.a) + httpclient (>= 2.8.1, < 3.a) + mini_mime (~> 1.0) + representable (~> 3.0) + retriable (>= 2.0, < 4.a) + rexml + webrick + google-apis-firebaseappdistribution_v1 (0.3.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-iamcredentials_v1 (0.17.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-playcustomapp_v1 (0.13.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-storage_v1 (0.19.0) + google-apis-core (>= 0.9.0, < 2.a) + google-cloud-core (1.6.0) + google-cloud-env (~> 1.0) + google-cloud-errors (~> 1.0) + google-cloud-env (1.6.0) + faraday (>= 0.17.3, < 3.0) + google-cloud-errors (1.3.1) + google-cloud-storage (1.44.0) + addressable (~> 2.8) + digest-crc (~> 0.4) + google-apis-iamcredentials_v1 (~> 0.1) + google-apis-storage_v1 (~> 0.19.0) + google-cloud-core (~> 1.6) + googleauth (>= 0.16.2, < 2.a) + mini_mime (~> 1.0) + googleauth (1.8.1) + faraday (>= 0.17.3, < 3.a) + jwt (>= 1.4, < 3.0) + multi_json (~> 1.11) + os (>= 0.9, < 2.0) + signet (>= 0.16, < 2.a) + highline (2.0.3) + http-accept (1.7.0) + http-cookie (1.0.5) + domain_name (~> 0.5) + httpclient (2.8.3) + i18n (1.14.1) + concurrent-ruby (~> 1.0) + jmespath (1.6.2) + json (2.6.3) + jwt (2.7.1) + mime-types (3.5.1) + mime-types-data (~> 3.2015) + mime-types-data (3.2023.1003) + mini_magick (4.12.0) + mini_mime (1.1.5) + minitest (5.20.0) + molinillo (0.6.6) + multi_json (1.15.0) + multipart-post (2.3.0) + nanaimo (0.3.0) + nap (1.1.0) + naturally (2.2.1) + netrc (0.11.0) + optparse (0.1.1) + opus-ruby (1.0.1) + ffi + os (1.1.4) + plist (3.7.0) + public_suffix (5.0.3) + rake (13.1.0) + rbnacl (3.4.0) + ffi + representable (3.2.0) + declarative (< 0.1.0) + trailblazer-option (>= 0.1.1, < 0.2.0) + uber (< 0.2.0) + rest-client (2.1.0) + http-accept (>= 1.7.0, < 2.0) + http-cookie (>= 1.0.2, < 2.0) + mime-types (>= 1.16, < 4.0) + netrc (~> 0.8) + retriable (3.1.2) + rexml (3.2.6) + rouge (2.0.7) + ruby-macho (1.4.0) + ruby2_keywords (0.0.5) + rubyzip (2.3.2) + security (0.1.3) + signet (0.18.0) + addressable (~> 2.8) + faraday (>= 0.17.5, < 3.a) + jwt (>= 1.5, < 3.0) + multi_json (~> 1.10) + simctl (1.6.10) + CFPropertyList + naturally + terminal-notifier (2.0.0) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + thread_safe (0.3.6) + trailblazer-option (0.1.2) + tty-cursor (0.7.1) + tty-screen (0.8.1) + tty-spinner (0.9.3) + tty-cursor (~> 0.7) + typhoeus (1.4.1) + ethon (>= 0.9.0) + tzinfo (1.2.11) + thread_safe (~> 0.1) + uber (0.1.0) + unf (0.1.4) + unf_ext + unf_ext (0.0.8.2) + unicode-display_width (2.5.0) + webrick (1.8.1) + websocket (1.2.10) + websocket-client-simple (0.8.0) + event_emitter + websocket + word_wrap (1.0.0) + xcodeproj (1.23.0) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.3.0) + rexml (~> 3.2.4) + xcpretty (0.3.0) + rouge (~> 2.0.7) + xcpretty-travis-formatter (1.0.1) + xcpretty (~> 0.2, >= 0.0.7) + +PLATFORMS + arm64-darwin-21 + +DEPENDENCIES + cocoapods + fastlane + fastlane-plugin-discord_notifier + fastlane-plugin-firebase_app_distribution + +BUNDLED WITH + 2.3.7 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..caec9b8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Ricki Bin Yamin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/Modules/SDDocsOrganizer/SDDocsOrganizer/ScanAlbums/View/SDScanAlbumsEmptyView.swift b/Modules/SDDocsOrganizer/SDDocsOrganizer/ScanAlbums/View/SDScanAlbumsEmptyView.swift new file mode 100644 index 0000000..44a1fdf --- /dev/null +++ b/Modules/SDDocsOrganizer/SDDocsOrganizer/ScanAlbums/View/SDScanAlbumsEmptyView.swift @@ -0,0 +1,59 @@ +// +// SDScanAlbumsEmptyView.swift +// SDDocsOrganizer +// +// Created by Ricki Bin Yamin on 19/11/23. +// + +import UIKit +import SDCoreKit + +final class SDScanAlbumsEmptyView: UIView { + private lazy var titleLabel: UILabel = { + let label = UILabel() + label.translatesAutoresizingMaskIntoConstraints = false + label.font = .preferredFont(forTextStyle: .title3) + label.textColor = .label + label.numberOfLines = 0 + label.textAlignment = .center + label.text = "You don't have any documents" + + return label + }() + + private lazy var messageLabel: UILabel = { + let label = UILabel() + label.translatesAutoresizingMaskIntoConstraints = false + label.font = .preferredFont(forTextStyle: .footnote) + label.textColor = .secondaryLabel + label.numberOfLines = 0 + label.textAlignment = .center + label.text = "Tap camera button on top right to start scanning document." + + return label + }() + + init() { + super.init(frame: .zero) + + setupViews() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupViews() { + addSubviews([titleLabel, messageLabel]) + + NSLayoutConstraint.activate([ + titleLabel.centerYAnchor.constraint(equalTo: centerYAnchor), + titleLabel.leftAnchor.constraint(equalTo: leftAnchor, constant: 20), + titleLabel.rightAnchor.constraint(equalTo: rightAnchor, constant: -20), + + messageLabel.topAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: 8), + messageLabel.leftAnchor.constraint(equalTo: leftAnchor, constant: 20), + messageLabel.rightAnchor.constraint(equalTo: rightAnchor, constant: -20) + ]) + } +} diff --git a/Modules/SDDocsOrganizer/SDDocsOrganizer/ScanAlbums/View/SDScanAlbumsViewController.swift b/Modules/SDDocsOrganizer/SDDocsOrganizer/ScanAlbums/View/SDScanAlbumsViewController.swift index 54f47ad..399c76f 100644 --- a/Modules/SDDocsOrganizer/SDDocsOrganizer/ScanAlbums/View/SDScanAlbumsViewController.swift +++ b/Modules/SDDocsOrganizer/SDDocsOrganizer/ScanAlbums/View/SDScanAlbumsViewController.swift @@ -171,6 +171,16 @@ final class SDScanAlbumsViewController: UIViewController, IScreenIdentifier { } } } + + private func configureEmptyState() { + let emptyView: SDScanAlbumsEmptyView = SDScanAlbumsEmptyView() + emptyView.frame = CGRect(x: view.center.x, y: view.center.y, width: view.bounds.size.width, height: view.bounds.size.height) + tableView.backgroundView = emptyView + } + + private func clearEmptyState() { + tableView.backgroundView = nil + } } extension SDScanAlbumsViewController { @@ -335,6 +345,12 @@ extension SDScanAlbumsViewController: UITableViewDelegate, UITableViewDataSource func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { interactor.getFetchedDocumentGroup() + if tableData.count == 0 { + configureEmptyState() + } else { + clearEmptyState() + } + return tableData.count } diff --git a/Podfile b/Podfile index f006905..cdca7e7 100644 --- a/Podfile +++ b/Podfile @@ -11,6 +11,9 @@ target 'Scandocs' do pod 'SDDocumentEditor', :path => 'Modules/SDDocumentEditor' pod 'SDPhotosGallery', :path => 'Modules/SDPhotosGallery' pod 'SDScanKit', :path => 'Modules/SDScanKit' + + pod 'FirebaseAnalytics' + pod 'FirebaseCrashlytics' end post_install do |installer| diff --git a/Podfile.lock b/Podfile.lock index 88f99d2..ea72654 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,4 +1,102 @@ PODS: + - FirebaseAnalytics (10.17.0): + - FirebaseAnalytics/AdIdSupport (= 10.17.0) + - FirebaseCore (~> 10.0) + - FirebaseInstallations (~> 10.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30910.0, >= 2.30908.0) + - FirebaseAnalytics/AdIdSupport (10.17.0): + - FirebaseCore (~> 10.0) + - FirebaseInstallations (~> 10.0) + - GoogleAppMeasurement (= 10.17.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30910.0, >= 2.30908.0) + - FirebaseCore (10.17.0): + - FirebaseCoreInternal (~> 10.0) + - GoogleUtilities/Environment (~> 7.8) + - GoogleUtilities/Logger (~> 7.8) + - FirebaseCoreExtension (10.17.0): + - FirebaseCore (~> 10.0) + - FirebaseCoreInternal (10.17.0): + - "GoogleUtilities/NSData+zlib (~> 7.8)" + - FirebaseCrashlytics (10.17.0): + - FirebaseCore (~> 10.5) + - FirebaseInstallations (~> 10.0) + - FirebaseSessions (~> 10.5) + - GoogleDataTransport (~> 9.2) + - GoogleUtilities/Environment (~> 7.8) + - nanopb (< 2.30910.0, >= 2.30908.0) + - PromisesObjC (~> 2.1) + - FirebaseInstallations (10.17.0): + - FirebaseCore (~> 10.0) + - GoogleUtilities/Environment (~> 7.8) + - GoogleUtilities/UserDefaults (~> 7.8) + - PromisesObjC (~> 2.1) + - FirebaseSessions (10.17.0): + - FirebaseCore (~> 10.5) + - FirebaseCoreExtension (~> 10.0) + - FirebaseInstallations (~> 10.0) + - GoogleDataTransport (~> 9.2) + - GoogleUtilities/Environment (~> 7.10) + - nanopb (< 2.30910.0, >= 2.30908.0) + - PromisesSwift (~> 2.1) + - GoogleAppMeasurement (10.17.0): + - GoogleAppMeasurement/AdIdSupport (= 10.17.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30910.0, >= 2.30908.0) + - GoogleAppMeasurement/AdIdSupport (10.17.0): + - GoogleAppMeasurement/WithoutAdIdSupport (= 10.17.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30910.0, >= 2.30908.0) + - GoogleAppMeasurement/WithoutAdIdSupport (10.17.0): + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30910.0, >= 2.30908.0) + - GoogleDataTransport (9.2.5): + - GoogleUtilities/Environment (~> 7.7) + - nanopb (< 2.30910.0, >= 2.30908.0) + - PromisesObjC (< 3.0, >= 1.2) + - GoogleUtilities/AppDelegateSwizzler (7.12.0): + - GoogleUtilities/Environment + - GoogleUtilities/Logger + - GoogleUtilities/Network + - GoogleUtilities/Environment (7.12.0): + - PromisesObjC (< 3.0, >= 1.2) + - GoogleUtilities/Logger (7.12.0): + - GoogleUtilities/Environment + - GoogleUtilities/MethodSwizzler (7.12.0): + - GoogleUtilities/Logger + - GoogleUtilities/Network (7.12.0): + - GoogleUtilities/Logger + - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Reachability + - "GoogleUtilities/NSData+zlib (7.12.0)" + - GoogleUtilities/Reachability (7.12.0): + - GoogleUtilities/Logger + - GoogleUtilities/UserDefaults (7.12.0): + - GoogleUtilities/Logger + - nanopb (2.30909.1): + - nanopb/decode (= 2.30909.1) + - nanopb/encode (= 2.30909.1) + - nanopb/decode (2.30909.1) + - nanopb/encode (2.30909.1) + - PromisesObjC (2.3.1) + - PromisesSwift (2.3.1): + - PromisesObjC (= 2.3.1) - SDCameraScan (1.0.0): - SDCoreKit - SDScanKit @@ -21,6 +119,8 @@ PODS: - SDCoreKit DEPENDENCIES: + - FirebaseAnalytics + - FirebaseCrashlytics - SDCameraScan (from `Modules/SDCameraScan`) - SDCloudKitModel (from `Modules/SDCloudKitModel`) - SDCoreKit (from `Modules/SDCoreKit`) @@ -30,6 +130,22 @@ DEPENDENCIES: - SDPhotosGallery (from `Modules/SDPhotosGallery`) - SDScanKit (from `Modules/SDScanKit`) +SPEC REPOS: + trunk: + - FirebaseAnalytics + - FirebaseCore + - FirebaseCoreExtension + - FirebaseCoreInternal + - FirebaseCrashlytics + - FirebaseInstallations + - FirebaseSessions + - GoogleAppMeasurement + - GoogleDataTransport + - GoogleUtilities + - nanopb + - PromisesObjC + - PromisesSwift + EXTERNAL SOURCES: SDCameraScan: :path: Modules/SDCameraScan @@ -49,6 +165,19 @@ EXTERNAL SOURCES: :path: Modules/SDScanKit SPEC CHECKSUMS: + FirebaseAnalytics: b9284f9fff10157a843e0422e908711f7bf3b9f2 + FirebaseCore: 534544dd98cabcf4bf8598d88ec683b02319a528 + FirebaseCoreExtension: 47720bb330d7041047c0935a34a3a4b92f818074 + FirebaseCoreInternal: 2cf9202e226e3f78d2bf6d56c472686b935bfb7f + FirebaseCrashlytics: d78651ad7db206ef98269e103ac38d69d569200a + FirebaseInstallations: 9387bf15abfc69a714f54e54f74a251264fdb79b + FirebaseSessions: 49f39e5c10e3f9fdd38d01b748329bae2a2fa8ed + GoogleAppMeasurement: 4dcddfc7f102825c1c4e6422cb35567b101881a7 + GoogleDataTransport: 54dee9d48d14580407f8f5fbf2f496e92437a2f2 + GoogleUtilities: 0759d1a57ebb953965c2dfe0ba4c82e95ccc2e34 + nanopb: d4d75c12cd1316f4a64e3c6963f879ecd4b5e0d5 + PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4 + PromisesSwift: 28dca69a9c40779916ac2d6985a0192a5cb4a265 SDCameraScan: a6ee2c74fab855cd7995eafc310d738553676cf0 SDCloudKitModel: 5d8674c8e83592202158f9d559b0d877d4106b81 SDCoreKit: 098a4f1d9398d9f7de03cf33307b35f1a31a4941 @@ -58,6 +187,6 @@ SPEC CHECKSUMS: SDPhotosGallery: 2d7e7c2182a4c6f4136e605fbc738ba3415c35e6 SDScanKit: 8ccf2518b7bdadd7771ca2e07362fbee4f39ec78 -PODFILE CHECKSUM: 11015ba41b2bafbf297d843272f2c2457ac84e3b +PODFILE CHECKSUM: 2022d526fb9052a8635f6085adeb06e257426b07 COCOAPODS: 1.11.3 diff --git a/Privacy Policy/PrivacyPolicy.md b/Privacy Policy/PrivacyPolicy.md new file mode 100644 index 0000000..d22b1fb --- /dev/null +++ b/Privacy Policy/PrivacyPolicy.md @@ -0,0 +1,33 @@ +# Privacy Policy for Scandocs + +**Last updated:** November 19, 2023 + +## 1. Introduction + +Welcome to Scandocs, a document scanner application for iOS. This Privacy Policy is designed to help you understand how we collect, use, share, and safeguard your personal information. + +## 2. Information We Collect + +- **Camera Access:** Scandocs requires access to your device's camera to scan documents. We do not store any images captured by the camera. + +- **Photo Library Access:** Scandocs require access to your photo library to import your local photos to be cropped or processed inside Scandocs apps. + +- **Personal Information:** Scandocs does not collect or store any personal information. + +## 3. Database Location + +We store your scanned document to your personal iCloud account, not public CloudKit storage. So that only you that have access to your scanned document. + +## 4. Your Choices + +You can control and manage app permissions through your device settings. You may also contact us to inquire about the information we have collected and request its deletion. + +## 5. Changes to This Privacy Policy + +We may update this Privacy Policy periodically. Users will be notified of any changes by revising the "Last updated" date at the top of this page. + +## 8. Contact Us + +If you have any questions or concerns about this Privacy Policy, please contact us at ricki.bin.yamin@gmail.com. + +By using Scandocs, you agree to the terms outlined in this Privacy Policy. diff --git a/README.md b/README.md new file mode 100644 index 0000000..39fe0c8 --- /dev/null +++ b/README.md @@ -0,0 +1,44 @@ +# Scandocs: Document Scanner + +[![License](https://img.shields.io/badge/license-MIT-green)](LICENSE) + +Scandocs is a simple and efficient document scanner app for iOS. Capture, organize, and manage your documents effortlessly. What sets Scandocs apart? It's totally free, with no ads or hidden subscriptions! + +## Features + +- 📷 **Easy Scanning:** Utilize your device's camera to quickly scan documents. +- 📑 **Organize Documents:** Create and manage folders to keep your scans organized. +- 🚀 **Fast and Lightweight:** Enjoy a streamlined experience with a focus on simplicity. +- 🔄 **iCloud Synced:** Your saved document are synced in iCloud. You can access it on any ios devices that use the same iCloud account. + +## Get Started +1. Your system should have [`xcodegen`](https://github.com/yonaskolb/XcodeGen?tab=readme-ov-file#installing) and [`cocoapods`](https://guides.cocoapods.org/using/getting-started.html#installation) installed before running this project. +2. Clone the repository: `git clone https://github.com/rickirby/scandocs.git` or `git clone git@github.com:rickirby/scandocs.git`. +3. Run `./setup.sh` from your terminal. It should setup the project (by XcodeGen) and then setting up dependency (by CocoaPods). +2. Open `Scandocs.xcworkspace`. +3. Build and run the app on your iOS device or simulator. + +## App Store + +Download Scandocs on the [App Store](https://apps.apple.com/id/app/scandocs-document-scanner/id6472603812). + +## Screenshots + +| ![Screenshot 1](screenshots/screenshots1.png) | ![Screenshot 2](screenshots/screenshots2.png) | ![Screenshot 3](screenshots/screenshots3.png) | ![Screenshot 4](screenshots/screenshots4.png) | +|-----------------------------------------------|-----------------------------------------------|-----------------------------------------------|-----------------------------------------------| + +## Keywords + +Document Scanner, Scanner, Camera Scanner, Page Scan, Scan + +## Contributing + +We welcome contributions! Please check out our [contribution guidelines](CONTRIBUTING.md) for details. + +## License + +Scandocs is available under the MIT License. See the [LICENSE](LICENSE) file for more information. + +--- + +**Note:** If you enjoy using Scandocs, consider leaving a positive review on the App Store. Your feedback is invaluable! \ No newline at end of file diff --git a/Scandocs/AppUtilities/AppDelegate.swift b/Scandocs/AppUtilities/AppDelegate.swift index 343ccc8..d8fd2db 100644 --- a/Scandocs/AppUtilities/AppDelegate.swift +++ b/Scandocs/AppUtilities/AppDelegate.swift @@ -15,6 +15,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. + FirebaseSetupCommand().execute() return true } diff --git a/Scandocs/AppUtilities/SetupCommandUtilities/SetupCommand/FirebaseSetupCommand.swift b/Scandocs/AppUtilities/SetupCommandUtilities/SetupCommand/FirebaseSetupCommand.swift new file mode 100644 index 0000000..baa4b11 --- /dev/null +++ b/Scandocs/AppUtilities/SetupCommandUtilities/SetupCommand/FirebaseSetupCommand.swift @@ -0,0 +1,15 @@ +// +// FirebaseSetupCommand.swift +// Scandocs +// +// Created by Ricki Bin Yamin on 19/11/23. +// + +import Foundation +import FirebaseCore + +struct FirebaseSetupCommand: ISetupCommand { + func execute() { + FirebaseApp.configure() + } +} diff --git a/Scandocs/GoogleService-Info.plist b/Scandocs/GoogleService-Info.plist new file mode 100644 index 0000000..ce8e20c --- /dev/null +++ b/Scandocs/GoogleService-Info.plist @@ -0,0 +1,30 @@ + + + + + API_KEY + AIzaSyBgNNGOQPByzEwJHBucijn1bu0Zz9BTbfg + GCM_SENDER_ID + 364479955210 + PLIST_VERSION + 1 + BUNDLE_ID + com.scandocs.ios + PROJECT_ID + scandocs-ios + STORAGE_BUCKET + scandocs-ios.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:364479955210:ios:57751a7f94a28496833af3 + + \ No newline at end of file diff --git a/Scandocs/Supporting Files/Info.plist b/Scandocs/Supporting Files/Info.plist index f628db4..b9492be 100644 --- a/Scandocs/Supporting Files/Info.plist +++ b/Scandocs/Supporting Files/Info.plist @@ -10,6 +10,12 @@ $(VERSION_NAME) CFBundleVersion $(BUILD_NUMBER) + CFBundlePackageType + APPL + CFBundleDisplayName + $(APP_NAME) + CFBundleName + $(APP_NAME) UIApplicationSceneManifest UIApplicationSupportsMultipleScenes @@ -41,5 +47,7 @@ The app needs access to save scanned documents in your photo library NSCameraUsageDescription The app needs access your camera to capture the document that will be scanned + ITSAppUsesNonExemptEncryption + diff --git a/Tooling/change_build_number.sh b/Tooling/change_build_number.sh new file mode 100755 index 0000000..ae1e88d --- /dev/null +++ b/Tooling/change_build_number.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +# Input Param +new_build_number="$1" + +# Change BUILD_NUMBER in .xcconfig files +echo -e "\033[0;33mChange BUILD_NUMBER in all .xcconfig files into $new_build_number...\033[0m" +xcconfig_path="Configuration" + +find "$xcconfig_path" -type f -name "*.xcconfig" -exec sed -i '' -e "s/BUILD_NUMBER = .*/BUILD_NUMBER = $new_build_number/" {} \; +echo -e "\033[0;32m✅ Successfully update BUILD_NUMBER to $new_build_number in all .xcconfig files\033[0m" \ No newline at end of file diff --git a/project.yml b/project.yml index baf7418..39db8e9 100644 --- a/project.yml +++ b/project.yml @@ -10,6 +10,8 @@ settings: PRODUCT_BUNDLE_IDENTIFIER: $(BUNDLE_ID) BUILD_NUMBER: $(BUILD_NUMBER) VERSION_NAME: $(VERSION_NAME) + PROVISIONING_PROFILE_SPECIFIER: $(APP_PROVISIONING_PROFILE) + CODE_SIGN_IDENTITY: $(CODE_SIGN_IDENTITY) targets: Scandocs: @@ -25,6 +27,17 @@ targets: TARGETED_DEVICE_FAMILY: $(TARGETED_DEVICE_FAMILY) SWIFT_ACTIVE_COMPILATION_CONDITIONS: $(SWIFT_ACTIVE_COMPILATION_CONDITIONS) CODE_SIGN_ENTITLEMENTS: "Scandocs/Supporting Files/Scandocs.entitlements" + postBuildScripts: + - name: Upload dSYMs Scripts + path: xcodegen-scripts/upload_dsyms.sh + basedOnDependencyAnalysis: YES + showEnvVars: YES + inputFiles: + - "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}" + - "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${PRODUCT_NAME}" + - "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist" + - "$(TARGET_BUILD_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/GoogleService-Info.plist" + - "$(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)" schemes: Scandocs: diff --git a/screenshots/screenshots1.png b/screenshots/screenshots1.png new file mode 100644 index 0000000..8551a54 Binary files /dev/null and b/screenshots/screenshots1.png differ diff --git a/screenshots/screenshots2.png b/screenshots/screenshots2.png new file mode 100644 index 0000000..c97a5aa Binary files /dev/null and b/screenshots/screenshots2.png differ diff --git a/screenshots/screenshots3.png b/screenshots/screenshots3.png new file mode 100644 index 0000000..ea4b2aa Binary files /dev/null and b/screenshots/screenshots3.png differ diff --git a/screenshots/screenshots4.png b/screenshots/screenshots4.png new file mode 100644 index 0000000..b0feb3c Binary files /dev/null and b/screenshots/screenshots4.png differ diff --git a/xcodegen-scripts/upload_dsyms.sh b/xcodegen-scripts/upload_dsyms.sh new file mode 100755 index 0000000..6bba2bd --- /dev/null +++ b/xcodegen-scripts/upload_dsyms.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +${PROJECT_DIR}/Pods/FirebaseCrashlytics/Run \ No newline at end of file