From de153ab9ac6fe4534711f157a249ccd8ea97355d Mon Sep 17 00:00:00 2001 From: Arkadiusz Fal Date: Sun, 19 Feb 2023 14:43:17 +0100 Subject: [PATCH] Add workflow for building and TestFlight --- .github/workflows/release.yml | 98 +++++++++ CHANGELOG.md | 4 + Gemfile.lock | 48 ++--- Yattee.xcodeproj/project.pbxproj | 187 +++++++++-------- .../xcshareddata/swiftpm/Package.resolved | 32 +-- fastlane/.env.sample | 20 ++ fastlane/Appfile | 4 +- fastlane/Fastfile | 188 ++++++++++++++++-- fastlane/Matchfile | 13 ++ fastlane/Pluginfile | 2 - fastlane/README.md | 27 +++ 11 files changed, 483 insertions(+), 140 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 CHANGELOG.md create mode 100644 fastlane/.env.sample create mode 100644 fastlane/Matchfile diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..35634e22 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,98 @@ +name: Build and release to TestFlight and GitHub +on: + push: + branches: [ main ] + workflow_dispatch: + +env: + FASTLANE_USER: ${{ secrets.FASTLANE_USER }} + FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }} + ITC_TEAM_ID: ${{ secrets.ITC_TEAM_ID }} + TEAM_ID: ${{ secrets.TEAM_ID }} + DEVELOPER_KEY_ID: ${{ secrets.DEVELOPER_KEY_ID }} + DEVELOPER_KEY_ISSUER_ID: ${{ secrets.DEVELOPER_KEY_ISSUER_ID }} + DEVELOPER_KEY_CONTENT: ${{ secrets.DEVELOPER_KEY_CONTENT }} + TEMP_KEYCHAIN_USER: ${{ secrets.TEMP_KEYCHAIN_USER }} + TEMP_KEYCHAIN_PASSWORD: ${{ secrets.TEMP_KEYCHAIN_PASSWORD }} + DEVELOPER_APP_IDENTIFIER: ${{ secrets.DEVELOPER_APP_IDENTIFIER }} + GIT_AUTHORIZATION: ${{ secrets.GIT_AUTHORIZATION }} + MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} + CERTIFICATES_GIT_URL: ${{ secrets.CERTIFICATES_GIT_URL }} + TESTFLIGHT_EXTERNAL_GROUPS: ${{ secrets.TESTFLIGHT_EXTERNAL_GROUPS }} + +jobs: + testflight: + strategy: + matrix: + lane: ['mac beta', 'ios beta', 'tvos beta'] + name: Releasing ${{ matrix.lane }} version to TestFlight + runs-on: macos-latest + steps: + - uses: actions/checkout@v3 + - uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.0' + bundler-cache: true + - name: Replace signing certificate to AppStore + run: | + sed -i '' 's/match Development/match AppStore/' Yattee.xcodeproj/project.pbxproj + sed -i '' 's/iPhone Developer/iPhone Distribution/' Yattee.xcodeproj/project.pbxproj + - uses: maierj/fastlane-action@v3.0.0 + with: + lane: ${{ matrix.lane }} + - uses: actions/upload-artifact@v3 + with: + name: ${{ matrix.lane }} build + path: fastlane/builds/**/*.ipa + if-no-files-found: ignore + mac_notarized: + name: Build and notarize macOS app + runs-on: macos-latest + steps: + - uses: actions/checkout@v3 + - uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.0' + bundler-cache: true + - name: Replace signing certificate to Direct with Developer ID + run: | + sed -i '' 's/match AppStore/match Direct/' Yattee.xcodeproj/project.pbxproj + sed -i '' 's/3rd Party Mac Developer Application/Developer ID Application/' Yattee.xcodeproj/project.pbxproj + - uses: maierj/fastlane-action@v3.0.0 + with: + lane: mac build_and_notarize + - run: | + echo "BUILD_NUMBER=$(cat Yattee.xcodeproj/project.pbxproj | grep -m 1 CURRENT_PROJECT_VERSION | cut -d' ' -f3 | sed 's/;//g')" >> $GITHUB_ENV + echo "VERSION_NUMBER=$(cat Yattee.xcodeproj/project.pbxproj | grep -m 1 MARKETING_VERSION | cut -d' ' -f3 | sed 's/;//g')" >> $GITHUB_ENV + - run: | + echo "APP_PATH=fastlane/builds/${{ env.VERSION_NUMBER }}-${{ env.BUILD_NUMBER }}/macOS/Yattee.app" >> $GITHUB_ENV + echo "ZIP_PATH=fastlane/builds/${{ env.VERSION_NUMBER }}-${{ env.BUILD_NUMBER }}/macOS/Yattee-${{ env.VERSION_NUMBER }}-macOS.zip" >> $GITHUB_ENV + - name: ZIP build + run: /usr/bin/ditto -c -k --keepParent ${{ env.APP_PATH }} ${{ env.ZIP_PATH }} + - uses: actions/upload-artifact@v3 + with: + name: mac notarized build + path: ${{ env.ZIP_PATH }} + if-no-files-found: error + release: + needs: ['testflight', 'mac_notarized'] + name: Create GitHub release + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - run: echo "BUILD_NUMBER=$(cat Yattee.xcodeproj/project.pbxproj | grep -m 1 CURRENT_PROJECT_VERSION | cut -d' ' -f3 | sed 's/;//g')" >> $GITHUB_ENV + - run: echo "VERSION_NUMBER=$(cat Yattee.xcodeproj/project.pbxproj | grep -m 1 MARKETING_VERSION | cut -d' ' -f3 | sed 's/;//g')" >> $GITHUB_ENV + - uses: actions/download-artifact@v3 + with: + path: artifacts + - name: Display structure of downloaded files + run: ls -R + working-directory: artifacts + - uses: ncipollo/release-action@v1 + with: + artifacts: artifacts/**/*.ipa,artifacts/**/*.zip + commit: main + tag: ${{ env.VERSION_NUMBER }}-${{ env.BUILD_NUMBER }} + prerelease: true + bodyFile: CHANGELOG.md + diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..b7a49a75 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,4 @@ +## Build 133 + +* Fixed issue with loading channels in Favorites with Invidious +* Other minor changes and improvements diff --git a/Gemfile.lock b/Gemfile.lock index 54c1cac1..8ac2ee17 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,29 +1,23 @@ -GIT - remote: git@github.com:yattee/fastlane-plugin-altool.git - revision: 4390a87c61f68a0efabb76236606d9861708bd46 - specs: - fastlane-plugin-altool (1.1.0) - GEM remote: https://rubygems.org/ specs: - CFPropertyList (3.0.5) + CFPropertyList (3.0.6) rexml addressable (2.8.1) public_suffix (>= 2.0.2, < 6.0) artifactory (3.0.15) atomos (0.1.3) aws-eventstream (1.2.0) - aws-partitions (1.660.0) - aws-sdk-core (3.167.0) + aws-partitions (1.716.0) + aws-sdk-core (3.170.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.59.0) + aws-sdk-kms (1.62.0) aws-sdk-core (~> 3, >= 3.165.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.117.1) + aws-sdk-s3 (1.119.1) aws-sdk-core (~> 3, >= 3.165.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.4) @@ -42,8 +36,8 @@ GEM unf (>= 0.0.5, < 1.0.0) dotenv (2.8.1) emoji_regex (3.2.3) - excon (0.94.0) - faraday (1.10.2) + excon (0.99.0) + faraday (1.10.3) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) faraday-excon (~> 1.1) @@ -72,7 +66,7 @@ GEM faraday_middleware (1.2.0) faraday (~> 1.0) fastimage (2.2.6) - fastlane (2.211.0) + fastlane (2.212.1) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) @@ -112,9 +106,9 @@ GEM xcpretty (~> 0.3.0) xcpretty-travis-formatter (>= 0.0.3) gh_inspector (1.1.3) - google-apis-androidpublisher_v3 (0.31.0) + google-apis-androidpublisher_v3 (0.34.0) google-apis-core (>= 0.9.1, < 2.a) - google-apis-core (0.9.1) + google-apis-core (0.11.0) addressable (~> 2.5, >= 2.5.1) googleauth (>= 0.16.2, < 2.a) httpclient (>= 2.8.1, < 3.a) @@ -123,8 +117,8 @@ GEM retriable (>= 2.0, < 4.a) rexml webrick - google-apis-iamcredentials_v1 (0.16.0) - google-apis-core (>= 0.9.1, < 2.a) + google-apis-iamcredentials_v1 (0.17.0) + google-apis-core (>= 0.11.0, < 2.a) google-apis-playcustomapp_v1 (0.12.0) google-apis-core (>= 0.9.1, < 2.a) google-apis-storage_v1 (0.19.0) @@ -154,11 +148,11 @@ GEM http-cookie (1.0.5) domain_name (~> 0.5) httpclient (2.8.3) - jmespath (1.6.1) - json (2.6.2) - jwt (2.5.0) + jmespath (1.6.2) + json (2.6.3) + jwt (2.7.0) memoist (0.16.2) - mini_magick (4.11.0) + mini_magick (4.12.0) mini_mime (1.1.2) multi_json (1.15.0) multipart-post (2.0.0) @@ -166,8 +160,8 @@ GEM naturally (2.2.1) optparse (0.1.1) os (1.1.4) - plist (3.6.0) - public_suffix (5.0.0) + plist (3.7.0) + public_suffix (5.0.1) rake (13.0.6) representable (3.2.0) declarative (< 0.1.0) @@ -184,7 +178,7 @@ GEM faraday (>= 0.17.5, < 3.a) jwt (>= 1.5, < 3.0) multi_json (~> 1.10) - simctl (1.6.8) + simctl (1.6.10) CFPropertyList naturally terminal-notifier (2.0.0) @@ -200,7 +194,7 @@ GEM unf_ext unf_ext (0.0.8.2) unicode-display_width (1.8.0) - webrick (1.7.0) + webrick (1.8.1) word_wrap (1.0.0) xcodeproj (1.22.0) CFPropertyList (>= 2.3.3, < 4.0) @@ -216,10 +210,10 @@ GEM PLATFORMS arm64-darwin-21 + x86_64-darwin-19 DEPENDENCIES fastlane - fastlane-plugin-altool! BUNDLED WITH 2.3.6 diff --git a/Yattee.xcodeproj/project.pbxproj b/Yattee.xcodeproj/project.pbxproj index ed25f8db..591d2a2f 100644 --- a/Yattee.xcodeproj/project.pbxproj +++ b/Yattee.xcodeproj/project.pbxproj @@ -69,7 +69,6 @@ 3703205C27D2BAF3007A0CB8 /* SwiftyJSON in Frameworks */ = {isa = PBXBuildFile; productRef = 3703205B27D2BAF3007A0CB8 /* SwiftyJSON */; }; 3703205E27D2BB12007A0CB8 /* SDWebImageWebPCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 3703205D27D2BB12007A0CB8 /* SDWebImageWebPCoder */; }; 3703206227D2BB1B007A0CB8 /* SDWebImagePINPlugin in Frameworks */ = {isa = PBXBuildFile; productRef = 3703206127D2BB1B007A0CB8 /* SDWebImagePINPlugin */; }; - 3703206427D2BB30007A0CB8 /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = 3703206327D2BB30007A0CB8 /* Logging */; }; 3703206627D2BB35007A0CB8 /* PINCache in Frameworks */ = {isa = PBXBuildFile; productRef = 3703206527D2BB35007A0CB8 /* PINCache */; }; 3703206827D2BB45007A0CB8 /* Defaults in Frameworks */ = {isa = PBXBuildFile; productRef = 3703206727D2BB45007A0CB8 /* Defaults */; }; 3703206A27D2BB49007A0CB8 /* Alamofire in Frameworks */ = {isa = PBXBuildFile; productRef = 3703206927D2BB49007A0CB8 /* Alamofire */; }; @@ -261,6 +260,7 @@ 37319F0727103F94004ECCD0 /* PlayerQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37319F0427103F94004ECCD0 /* PlayerQueue.swift */; }; 3732BFD028B83763009F3F4D /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = 3732BFCF28B83763009F3F4D /* KeychainAccess */; }; 3732C9FD28C012E600E7DCAF /* SafeArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37ECED55289FE166002BC2C9 /* SafeArea.swift */; }; + 3735C4E729A2D3D70051D251 /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = 3735C4E629A2D3D70051D251 /* Logging */; }; 3736A1FE286BB72300C9E5EE /* libavdevice.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3736A1EF286BB72300C9E5EE /* libavdevice.xcframework */; }; 3736A1FF286BB72300C9E5EE /* libavdevice.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3736A1EF286BB72300C9E5EE /* libavdevice.xcframework */; }; 3736A200286BB72300C9E5EE /* libuchardet.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3736A1F0286BB72300C9E5EE /* libuchardet.xcframework */; }; @@ -555,7 +555,6 @@ 3774127227387E0B00423605 /* SiestaConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3700155E271B12DD0049C794 /* SiestaConfiguration.swift */; }; 3774127427387E8500423605 /* SwiftyJSON in Frameworks */ = {isa = PBXBuildFile; productRef = 3774127327387E8500423605 /* SwiftyJSON */; }; 3774127627387EA200423605 /* Siesta in Frameworks */ = {isa = PBXBuildFile; productRef = 3774127527387EA200423605 /* Siesta */; }; - 3774127827387EB000423605 /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = 3774127727387EB000423605 /* Logging */; }; 3774127A27387EBC00423605 /* Defaults in Frameworks */ = {isa = PBXBuildFile; productRef = 3774127927387EBC00423605 /* Defaults */; }; 3774127C27387EC800423605 /* Alamofire in Frameworks */ = {isa = PBXBuildFile; productRef = 3774127B27387EC800423605 /* Alamofire */; }; 3776924E294630110055EC18 /* ChannelAvatarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3776924D294630110055EC18 /* ChannelAvatarView.swift */; }; @@ -596,7 +595,6 @@ 377F9F83294417B40043F856 /* Cache in Frameworks */ = {isa = PBXBuildFile; productRef = 377F9F82294417B40043F856 /* Cache */; }; 377F9F85294417FA0043F856 /* SwiftyJSON in Frameworks */ = {isa = PBXBuildFile; productRef = 377F9F84294417FA0043F856 /* SwiftyJSON */; }; 377FC7D5267A080300A6BBAF /* SwiftyJSON in Frameworks */ = {isa = PBXBuildFile; productRef = 377FC7D4267A080300A6BBAF /* SwiftyJSON */; }; - 377FC7DB267A080300A6BBAF /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = 377FC7DA267A080300A6BBAF /* Logging */; }; 377FC7DC267A081800A6BBAF /* PopularView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37AAF27D26737323007FC770 /* PopularView.swift */; }; 377FC7DD267A081A00A6BBAF /* PopularView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37AAF27D26737323007FC770 /* PopularView.swift */; }; 377FC7E2267A084A00A6BBAF /* VideoCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37D4B18B26717B3800C925CA /* VideoCell.swift */; }; @@ -657,6 +655,9 @@ 378FFBC628660172009E3FBE /* URLParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 378FFBC328660172009E3FBE /* URLParser.swift */; }; 378FFBC728660172009E3FBE /* URLParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 378FFBC328660172009E3FBE /* URLParser.swift */; }; 378FFBC92866018A009E3FBE /* URLParserTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 378FFBC82866018A009E3FBE /* URLParserTests.swift */; }; + 379325D529A265A300181CF1 /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = 379325D429A265A300181CF1 /* Logging */; }; + 379325D729A265AE00181CF1 /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = 379325D629A265AE00181CF1 /* Logging */; }; + 379325D929A265B500181CF1 /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = 379325D829A265B500181CF1 /* Logging */; }; 3795593627B08538007FF8F4 /* StreamControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3795593527B08538007FF8F4 /* StreamControl.swift */; }; 3795593727B08538007FF8F4 /* StreamControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3795593527B08538007FF8F4 /* StreamControl.swift */; }; 3797104928D3D10600D5F53C /* SDWebImageSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 3797104828D3D10600D5F53C /* SDWebImageSwiftUI */; }; @@ -727,7 +728,6 @@ 37B767DB2677C3CA0098BAA8 /* PlayerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37B767DA2677C3CA0098BAA8 /* PlayerModel.swift */; }; 37B767DC2677C3CA0098BAA8 /* PlayerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37B767DA2677C3CA0098BAA8 /* PlayerModel.swift */; }; 37B767DD2677C3CA0098BAA8 /* PlayerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37B767DA2677C3CA0098BAA8 /* PlayerModel.swift */; }; - 37B767E02678C5BF0098BAA8 /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = 37B767DF2678C5BF0098BAA8 /* Logging */; }; 37B795902771DAE0001CF27B /* OpenURLHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37B7958F2771DAE0001CF27B /* OpenURLHandler.swift */; }; 37B795912771DAE0001CF27B /* OpenURLHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37B7958F2771DAE0001CF27B /* OpenURLHandler.swift */; }; 37B81AF926D2C9A700675966 /* VideoPlayerSizeModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37B81AF826D2C9A700675966 /* VideoPlayerSizeModifier.swift */; }; @@ -887,7 +887,6 @@ 37D9BA0629507F69002586BD /* PlayerControlsSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37D9BA0529507F69002586BD /* PlayerControlsSettings.swift */; }; 37D9BA0729507F69002586BD /* PlayerControlsSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37D9BA0529507F69002586BD /* PlayerControlsSettings.swift */; }; 37D9BA0829507F69002586BD /* PlayerControlsSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37D9BA0529507F69002586BD /* PlayerControlsSettings.swift */; }; - 37DA0F20291DD6B8009B38CF /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = 37DA0F1F291DD6B8009B38CF /* Logging */; }; 37DD87C7271C9CFE0027CBF9 /* PlayerStreams.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37DD87C6271C9CFE0027CBF9 /* PlayerStreams.swift */; }; 37DD87C8271C9CFE0027CBF9 /* PlayerStreams.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37DD87C6271C9CFE0027CBF9 /* PlayerStreams.swift */; }; 37DD87C9271C9CFE0027CBF9 /* PlayerStreams.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37DD87C6271C9CFE0027CBF9 /* PlayerStreams.swift */; }; @@ -1524,8 +1523,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 3735C4E729A2D3D70051D251 /* Logging in Frameworks */, 377F9F85294417FA0043F856 /* SwiftyJSON in Frameworks */, - 37DA0F20291DD6B8009B38CF /* Logging in Frameworks */, 377F9F83294417B40043F856 /* Cache in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1555,6 +1554,7 @@ 37C2212527ADA40A00305B41 /* AudioToolbox.framework in Frameworks */, 372AA410286D067B0000B1DC /* Repeat in Frameworks */, 37C2212327ADA3F200305B41 /* libiconv.tbd in Frameworks */, + 379325D529A265A300181CF1 /* Logging in Frameworks */, 37C2212127ADA3A600305B41 /* libbz2.tbd in Frameworks */, 37EE6DC528A305AD00BFD632 /* Reachability in Frameworks */, 37C2211F27ADA3A200305B41 /* libz.tbd in Frameworks */, @@ -1577,7 +1577,6 @@ 3736A202286BB72300C9E5EE /* libfribidi.xcframework in Frameworks */, 37FB284D2722099E00A57617 /* SDWebImageWebPCoder in Frameworks */, 37A5DBC4285DFF5400CA4DD1 /* SwiftUIPager in Frameworks */, - 377FC7DB267A080300A6BBAF /* Logging in Frameworks */, 3736A208286BB72300C9E5EE /* libcrypto.xcframework in Frameworks */, 37CF8B8428535E4F00B71E37 /* SDWebImage in Frameworks */, 3736A20E286BB72300C9E5EE /* libass.xcframework in Frameworks */, @@ -1588,6 +1587,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 379325D729A265AE00181CF1 /* Logging in Frameworks */, 372AA414286D06A10000B1DC /* Repeat in Frameworks */, 370F4FD227CC16CB001B35DC /* libavformat.59.16.100.dylib in Frameworks */, 370F4FD327CC16CB001B35DC /* libass.9.dylib in Frameworks */, @@ -1610,7 +1610,6 @@ 370F4FDD27CC16CB001B35DC /* liblcms2.2.dylib in Frameworks */, 3703206227D2BB1B007A0CB8 /* SDWebImagePINPlugin in Frameworks */, 370F4FCB27CC16CB001B35DC /* libxcb.1.1.0.dylib in Frameworks */, - 3703206427D2BB30007A0CB8 /* Logging in Frameworks */, 371AC0B2294D1C230085989E /* CachedAsyncImage in Frameworks */, 370F4FD027CC16CB001B35DC /* libharfbuzz.0.dylib in Frameworks */, 370F4FCC27CC16CB001B35DC /* libxcb-xfixes.0.0.0.dylib in Frameworks */, @@ -1647,7 +1646,6 @@ files = ( 3774127C27387EC800423605 /* Alamofire in Frameworks */, 3774127A27387EBC00423605 /* Defaults in Frameworks */, - 3774127827387EB000423605 /* Logging in Frameworks */, 3774127427387E8500423605 /* SwiftyJSON in Frameworks */, 3774127627387EA200423605 /* Siesta in Frameworks */, ); @@ -1670,6 +1668,7 @@ 37FB285427220D8400A57617 /* SDWebImagePINPlugin in Frameworks */, 371AC0B4294D1C290085989E /* CachedAsyncImage in Frameworks */, 3732BFD028B83763009F3F4D /* KeychainAccess in Frameworks */, + 379325D929A265B500181CF1 /* Logging in Frameworks */, 3772003927E8EEB700CB2475 /* AVFoundation.framework in Frameworks */, 3736A20F286BB72300C9E5EE /* libass.xcframework in Frameworks */, 3736A1FF286BB72300C9E5EE /* libavdevice.xcframework in Frameworks */, @@ -1693,7 +1692,6 @@ 37D4B19D2671817900C925CA /* SwiftyJSON in Frameworks */, 3797757D268922D100DD52A8 /* Siesta in Frameworks */, 3736A219286BB72300C9E5EE /* libharfbuzz.xcframework in Frameworks */, - 37B767E02678C5BF0098BAA8 /* Logging in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2545,9 +2543,9 @@ ); name = "Open in Yattee"; packageProductDependencies = ( - 37DA0F1F291DD6B8009B38CF /* Logging */, 377F9F82294417B40043F856 /* Cache */, 377F9F84294417FA0043F856 /* SwiftyJSON */, + 3735C4E629A2D3D70051D251 /* Logging */, ); productName = "Open in Yattee"; productReference = 37095E7F291DC85400301883 /* Open in Yattee.appex */; @@ -2589,7 +2587,6 @@ name = "Yattee (iOS)"; packageProductDependencies = ( 377FC7D4267A080300A6BBAF /* SwiftyJSON */, - 377FC7DA267A080300A6BBAF /* Logging */, 37BD07B62698AB2E003EBB87 /* Defaults */, 37BD07B82698AB2E003EBB87 /* Siesta */, 37BD07C62698B27B003EBB87 /* Introspect */, @@ -2606,6 +2603,7 @@ 3797104828D3D10600D5F53C /* SDWebImageSwiftUI */, 377F9F73294403770043F856 /* Cache */, 371AC0AB294D1A490085989E /* CachedAsyncImage */, + 379325D429A265A300181CF1 /* Logging */, ); productName = "Yattee (iOS)"; productReference = 37D4B0C92671614900C925CA /* Yattee.app */; @@ -2633,7 +2631,6 @@ 3703205B27D2BAF3007A0CB8 /* SwiftyJSON */, 3703205D27D2BB12007A0CB8 /* SDWebImageWebPCoder */, 3703206127D2BB1B007A0CB8 /* SDWebImagePINPlugin */, - 3703206327D2BB30007A0CB8 /* Logging */, 3703206527D2BB35007A0CB8 /* PINCache */, 3703206727D2BB45007A0CB8 /* Defaults */, 3703206927D2BB49007A0CB8 /* Alamofire */, @@ -2644,6 +2641,7 @@ 3797104A28D3D18800D5F53C /* SDWebImageSwiftUI */, 374D11E62943C56300CB4350 /* Cache */, 371AC0B1294D1C230085989E /* CachedAsyncImage */, + 379325D629A265AE00181CF1 /* Logging */, ); productName = "Yattee (macOS)"; productReference = 37D4B0CF2671614900C925CA /* Yattee.app */; @@ -2684,7 +2682,6 @@ packageProductDependencies = ( 3774127327387E8500423605 /* SwiftyJSON */, 3774127527387EA200423605 /* Siesta */, - 3774127727387EB000423605 /* Logging */, 3774127927387EBC00423605 /* Defaults */, 3774127B27387EC800423605 /* Alamofire */, ); @@ -2709,7 +2706,6 @@ name = "Yattee (tvOS)"; packageProductDependencies = ( 37D4B19C2671817900C925CA /* SwiftyJSON */, - 37B767DF2678C5BF0098BAA8 /* Logging */, 372915E32687E33E00F5A35B /* Defaults */, 3797757C268922D100DD52A8 /* Siesta */, 37BADCA8269A570B009BE4FB /* Alamofire */, @@ -2723,6 +2719,7 @@ 3797104C28D3D19100D5F53C /* SDWebImageSwiftUI */, 377F9F75294403880043F856 /* Cache */, 371AC0B3294D1C290085989E /* CachedAsyncImage */, + 379325D829A265B500181CF1 /* Logging */, ); productName = Yattee; productReference = 37D4B158267164AE00C925CA /* Yattee.app */; @@ -2817,7 +2814,6 @@ mainGroup = 37D4B0BC2671614700C925CA; packageReferences = ( 37D4B19B2671817900C925CA /* XCRemoteSwiftPackageReference "SwiftyJSON" */, - 37B767DE2678C5BF0098BAA8 /* XCRemoteSwiftPackageReference "swift-log" */, 372915E22687E33E00F5A35B /* XCRemoteSwiftPackageReference "Defaults" */, 3797757B268922D100DD52A8 /* XCRemoteSwiftPackageReference "siesta" */, 37BD07C52698B27B003EBB87 /* XCRemoteSwiftPackageReference "SwiftUI-Introspect" */, @@ -2834,6 +2830,7 @@ 3797104728D3D10600D5F53C /* XCRemoteSwiftPackageReference "SDWebImageSwiftUI" */, 374D11E52943C56300CB4350 /* XCRemoteSwiftPackageReference "Cache" */, 371AC0AA294D1A490085989E /* XCRemoteSwiftPackageReference "swiftui-cached-async-image" */, + 379325D329A265A300181CF1 /* XCRemoteSwiftPackageReference "swift-log" */, ); productRefGroup = 37D4B0CA2671614900C925CA /* Products */; projectDirPath = ""; @@ -3961,8 +3958,12 @@ buildSettings = { CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_ENTITLEMENTS = "Open in Yattee/Open in Yattee.entitlements"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 114; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 135; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 78Z5H3M6RJ; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = "Open in Yattee/Info.plist"; INFOPLIST_KEY_CFBundleDisplayName = "Open in Yattee"; @@ -3977,6 +3978,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "stream.yattee.app.Open-in-Yattee"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match Development stream.yattee.app.Open-in-Yattee"; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_EMIT_LOC_STRINGS = YES; @@ -3991,8 +3993,11 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_ENTITLEMENTS = "Open in Yattee/Open in Yattee.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 114; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 135; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 78Z5H3M6RJ; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = "Open in Yattee/Info.plist"; INFOPLIST_KEY_CFBundleDisplayName = "Open in Yattee"; @@ -4006,6 +4011,8 @@ MARKETING_VERSION = 1.4.3; PRODUCT_BUNDLE_IDENTIFIER = "stream.yattee.app.Open-in-Yattee"; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match AppStore stream.yattee.app.Open-in-Yattee"; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_EMIT_LOC_STRINGS = YES; @@ -4020,11 +4027,11 @@ buildSettings = { CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 79; + CURRENT_PROJECT_VERSION = 135; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 14.0; MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 1.4.3; PRODUCT_BUNDLE_IDENTIFIER = "net.arekf.Shared-Tests"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = auto; @@ -4040,11 +4047,11 @@ buildSettings = { CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 79; + CURRENT_PROJECT_VERSION = 135; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 14.0; MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 1.4.3; PRODUCT_BUNDLE_IDENTIFIER = "net.arekf.Shared-Tests"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = auto; @@ -4198,8 +4205,12 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_CXX_LANGUAGE_STANDARD = "c++14"; CODE_SIGN_ENTITLEMENTS = "iOS/Yattee (iOS).entitlements"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 114; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 135; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 78Z5H3M6RJ; ENABLE_PREVIEWS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -4231,6 +4242,7 @@ PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app; PRODUCT_NAME = Yattee; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match Development stream.yattee.app"; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; @@ -4250,8 +4262,11 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = "iOS/Yattee (iOS).entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 114; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 135; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 78Z5H3M6RJ; ENABLE_PREVIEWS = YES; GCC_PREPROCESSOR_DEFINITIONS = "GLES_SILENCE_DEPRECATION=1"; GENERATE_INFOPLIST_FILE = YES; @@ -4279,6 +4294,7 @@ PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app; PRODUCT_NAME = Yattee; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match AppStore stream.yattee.app"; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; @@ -4299,10 +4315,13 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; CODE_SIGN_ENTITLEMENTS = Shared/Yattee.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application"; + CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 114; + CURRENT_PROJECT_VERSION = 135; DEAD_CODE_STRIPPING = YES; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=macosx*]" = 78Z5H3M6RJ; ENABLE_APP_SANDBOX = YES; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; @@ -4324,6 +4343,8 @@ OTHER_LDFLAGS = "-Wl,-no_compact_unwind"; PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app; PRODUCT_NAME = Yattee; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = "match AppStore stream.yattee.app macos"; SDKROOT = macosx; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OBJC_BRIDGING_HEADER = macOS/BridgingHeader.h; @@ -4339,10 +4360,13 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; CODE_SIGN_ENTITLEMENTS = Shared/Yattee.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application"; + CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 114; + CURRENT_PROJECT_VERSION = 135; DEAD_CODE_STRIPPING = YES; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=macosx*]" = 78Z5H3M6RJ; ENABLE_APP_SANDBOX = YES; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; @@ -4364,6 +4388,8 @@ OTHER_LDFLAGS = "-Wl,-no_compact_unwind"; PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app; PRODUCT_NAME = Yattee; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = "match AppStore stream.yattee.app macos"; SDKROOT = macosx; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OBJC_BRIDGING_HEADER = macOS/BridgingHeader.h; @@ -4376,7 +4402,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 79; + CURRENT_PROJECT_VERSION = 135; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -4384,7 +4410,7 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MARKETING_VERSION = 1.4; + MARKETING_VERSION = 1.4.3; PRODUCT_BUNDLE_IDENTIFIER = "stream.yattee.Tests-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; @@ -4400,7 +4426,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 79; + CURRENT_PROJECT_VERSION = 135; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -4408,7 +4434,7 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MARKETING_VERSION = 1.4; + MARKETING_VERSION = 1.4.3; PRODUCT_BUNDLE_IDENTIFIER = "stream.yattee.Tests-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; @@ -4426,7 +4452,7 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 79; + CURRENT_PROJECT_VERSION = 135; DEAD_CODE_STRIPPING = YES; GENERATE_INFOPLIST_FILE = YES; LD_RUNPATH_SEARCH_PATHS = ( @@ -4435,7 +4461,7 @@ "@loader_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 12.0; - MARKETING_VERSION = 1.4; + MARKETING_VERSION = 1.4.3; PRODUCT_BUNDLE_IDENTIFIER = "stream.yattee.Tests-macOS"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; @@ -4451,7 +4477,7 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 79; + CURRENT_PROJECT_VERSION = 135; DEAD_CODE_STRIPPING = YES; GENERATE_INFOPLIST_FILE = YES; LD_RUNPATH_SEARCH_PATHS = ( @@ -4460,7 +4486,7 @@ "@loader_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 12.0; - MARKETING_VERSION = 1.4; + MARKETING_VERSION = 1.4.3; PRODUCT_BUNDLE_IDENTIFIER = "stream.yattee.Tests-macOS"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; @@ -4475,9 +4501,12 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 114; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 135; DEVELOPMENT_ASSET_PATHS = ""; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=appletvos*]" = 78Z5H3M6RJ; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = tvOS/Info.plist; @@ -4499,6 +4528,8 @@ ); PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app; PRODUCT_NAME = Yattee; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=appletvos*]" = "match Development stream.yattee.app tvos"; SDKROOT = appletvos; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OBJC_BRIDGING_HEADER = tvOS/BridgingHeader.h; @@ -4513,9 +4544,12 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 114; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 135; DEVELOPMENT_ASSET_PATHS = ""; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=appletvos*]" = 78Z5H3M6RJ; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = tvOS/Info.plist; @@ -4537,6 +4571,8 @@ ); PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app; PRODUCT_NAME = Yattee; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=appletvos*]" = "match AppStore stream.yattee.app tvos"; SDKROOT = appletvos; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OBJC_BRIDGING_HEADER = tvOS/BridgingHeader.h; @@ -4552,14 +4588,14 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 79; + CURRENT_PROJECT_VERSION = 135; GENERATE_INFOPLIST_FILE = YES; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MARKETING_VERSION = 1.4; + MARKETING_VERSION = 1.4.3; PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.YatteeUITests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; @@ -4576,14 +4612,14 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 79; + CURRENT_PROJECT_VERSION = 135; GENERATE_INFOPLIST_FILE = YES; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MARKETING_VERSION = 1.4; + MARKETING_VERSION = 1.4.3; PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.YatteeUITests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; @@ -4794,6 +4830,14 @@ kind = branch; }; }; + 379325D329A265A300181CF1 /* XCRemoteSwiftPackageReference "swift-log" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/yattee/swift-log.git"; + requirement = { + branch = main; + kind = branch; + }; + }; 3797104728D3D10600D5F53C /* XCRemoteSwiftPackageReference "SDWebImageSwiftUI" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/SDWebImage/SDWebImageSwiftUI.git"; @@ -4826,14 +4870,6 @@ minimumVersion = 2.0.0; }; }; - 37B767DE2678C5BF0098BAA8 /* XCRemoteSwiftPackageReference "swift-log" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/apple/swift-log.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 1.0.0; - }; - }; 37BADCA32699FB72009BE4FB /* XCRemoteSwiftPackageReference "Alamofire" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/Alamofire/Alamofire.git"; @@ -4913,11 +4949,6 @@ package = 37FB285227220D8400A57617 /* XCRemoteSwiftPackageReference "SDWebImagePINPlugin" */; productName = SDWebImagePINPlugin; }; - 3703206327D2BB30007A0CB8 /* Logging */ = { - isa = XCSwiftPackageProductDependency; - package = 37B767DE2678C5BF0098BAA8 /* XCRemoteSwiftPackageReference "swift-log" */; - productName = Logging; - }; 3703206527D2BB35007A0CB8 /* PINCache */ = { isa = XCSwiftPackageProductDependency; package = 3765917827237D07009F956E /* XCRemoteSwiftPackageReference "PINCache" */; @@ -4973,6 +5004,11 @@ package = 375B8AAF28B57F4200397B31 /* XCRemoteSwiftPackageReference "KeychainAccess" */; productName = KeychainAccess; }; + 3735C4E629A2D3D70051D251 /* Logging */ = { + isa = XCSwiftPackageProductDependency; + package = 379325D329A265A300181CF1 /* XCRemoteSwiftPackageReference "swift-log" */; + productName = Logging; + }; 374D11E62943C56300CB4350 /* Cache */ = { isa = XCSwiftPackageProductDependency; package = 374D11E52943C56300CB4350 /* XCRemoteSwiftPackageReference "Cache" */; @@ -5008,11 +5044,6 @@ package = 3797757B268922D100DD52A8 /* XCRemoteSwiftPackageReference "siesta" */; productName = Siesta; }; - 3774127727387EB000423605 /* Logging */ = { - isa = XCSwiftPackageProductDependency; - package = 37B767DE2678C5BF0098BAA8 /* XCRemoteSwiftPackageReference "swift-log" */; - productName = Logging; - }; 3774127927387EBC00423605 /* Defaults */ = { isa = XCSwiftPackageProductDependency; package = 372915E22687E33E00F5A35B /* XCRemoteSwiftPackageReference "Defaults" */; @@ -5048,9 +5079,19 @@ package = 37D4B19B2671817900C925CA /* XCRemoteSwiftPackageReference "SwiftyJSON" */; productName = SwiftyJSON; }; - 377FC7DA267A080300A6BBAF /* Logging */ = { + 379325D429A265A300181CF1 /* Logging */ = { isa = XCSwiftPackageProductDependency; - package = 37B767DE2678C5BF0098BAA8 /* XCRemoteSwiftPackageReference "swift-log" */; + package = 379325D329A265A300181CF1 /* XCRemoteSwiftPackageReference "swift-log" */; + productName = Logging; + }; + 379325D629A265AE00181CF1 /* Logging */ = { + isa = XCSwiftPackageProductDependency; + package = 379325D329A265A300181CF1 /* XCRemoteSwiftPackageReference "swift-log" */; + productName = Logging; + }; + 379325D829A265B500181CF1 /* Logging */ = { + isa = XCSwiftPackageProductDependency; + package = 379325D329A265A300181CF1 /* XCRemoteSwiftPackageReference "swift-log" */; productName = Logging; }; 3797104828D3D10600D5F53C /* SDWebImageSwiftUI */ = { @@ -5088,11 +5129,6 @@ package = 37A5DBC2285DFF5400CA4DD1 /* XCRemoteSwiftPackageReference "SwiftUIPager" */; productName = SwiftUIPager; }; - 37B767DF2678C5BF0098BAA8 /* Logging */ = { - isa = XCSwiftPackageProductDependency; - package = 37B767DE2678C5BF0098BAA8 /* XCRemoteSwiftPackageReference "swift-log" */; - productName = Logging; - }; 37BADCA42699FB72009BE4FB /* Alamofire */ = { isa = XCSwiftPackageProductDependency; package = 37BADCA32699FB72009BE4FB /* XCRemoteSwiftPackageReference "Alamofire" */; @@ -5138,11 +5174,6 @@ package = 37D4B19B2671817900C925CA /* XCRemoteSwiftPackageReference "SwiftyJSON" */; productName = SwiftyJSON; }; - 37DA0F1F291DD6B8009B38CF /* Logging */ = { - isa = XCSwiftPackageProductDependency; - package = 37B767DE2678C5BF0098BAA8 /* XCRemoteSwiftPackageReference "swift-log" */; - productName = Logging; - }; 37E80F42287B7AAF00561799 /* SwiftUIPager */ = { isa = XCSwiftPackageProductDependency; package = 37A5DBC2285DFF5400CA4DD1 /* XCRemoteSwiftPackageReference "SwiftUIPager" */; diff --git a/Yattee.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Yattee.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 7e068d2d..d5ccfba5 100644 --- a/Yattee.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Yattee.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -14,8 +14,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/Alamofire/Alamofire.git", "state" : { - "revision" : "8dd85aee02e39dd280c75eef88ffdb86eed4b07b", - "version" : "5.6.2" + "revision" : "78424be314842833c04bc3bef5b72e85fff99204", + "version" : "5.6.4" } }, { @@ -42,7 +42,7 @@ "location" : "https://github.com/kishikawakatsumi/KeychainAccess.git", "state" : { "branch" : "master", - "revision" : "6299daec1d74be12164fec090faf9ed14d0da9d6" + "revision" : "ecb18d8ce4d88277cc4fb103973352d91e18c535" } }, { @@ -60,7 +60,7 @@ "location" : "https://github.com/pinterest/PINCache", "state" : { "branch" : "master", - "revision" : "9ca06045b5aff12ee8c0ef5880aa8469c4896144" + "revision" : "97a5dbd3f1e69605bcd4103fdb32ca855887c47a" } }, { @@ -68,8 +68,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pinterest/PINOperation.git", "state" : { - "revision" : "44d8ca154a4e75a028a5548c31ff3a53b90cef15", - "version" : "1.2.1" + "revision" : "40504c156a68b20f98f7ddc73a115cbb7893be25", + "version" : "1.2.2" } }, { @@ -96,7 +96,7 @@ "location" : "https://github.com/SDWebImage/SDWebImage", "state" : { "branch" : "master", - "revision" : "484bc774e1091f622c4856e576ff957b29403676" + "revision" : "554e05a4415fe20add53531c21e593c403685c3d" } }, { @@ -113,8 +113,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/SDWebImage/SDWebImageSwiftUI.git", "state" : { - "revision" : "ed288667c909c89127ab1b690113a3e397af3098", - "version" : "2.2.1" + "revision" : "61fefe9c284fd41ddef77d02749e88f00c305196", + "version" : "2.2.2" } }, { @@ -122,8 +122,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/SDWebImage/SDWebImageWebPCoder.git", "state" : { - "revision" : "4416805045174938b11edb69a86e9f7dd0699952", - "version" : "0.9.1" + "revision" : "e6cd1a9d2c976c14a52a040062646b535d0a6337", + "version" : "0.10.1" } }, { @@ -138,10 +138,10 @@ { "identity" : "swift-log", "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-log.git", + "location" : "https://github.com/yattee/swift-log.git", "state" : { - "revision" : "6fe203dc33195667ce1759bf0182975e4653ba1c", - "version" : "1.4.4" + "branch" : "main", + "revision" : "3f3dc1390a2f116894887c352792dc8d5fa9e875" } }, { @@ -158,8 +158,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/siteline/SwiftUI-Introspect.git", "state" : { - "revision" : "f2616860a41f9d9932da412a8978fec79c06fe24", - "version" : "0.1.4" + "revision" : "c18951c747ab62af7c15e17a81bd37d4fd5a9979", + "version" : "0.2.3" } }, { diff --git a/fastlane/.env.sample b/fastlane/.env.sample new file mode 100644 index 00000000..2fbdd2b1 --- /dev/null +++ b/fastlane/.env.sample @@ -0,0 +1,20 @@ +CERTIFICATES_GIT_URL="git@github.com:developer/yattee-certificates.git" +GIT_AUTHORIZATION = "" # For certificates repo, https://github.com/settings/tokens/new (repo scope) +FASTLANE_USER="developer@mail.com" # Apple ID +FASTLANE_PASSWORD="" # Apple ID Password +ITC_TEAM_ID="" # https://sarunw.com/posts/fastlane-find-team-id/ +TEAM_ID="" # Developer ID +DEVELOPER_NAME="" # Developer Name (Developer ID) + +# Developer Key +DEVELOPER_KEY_ID="" +DEVELOPER_KEY_ISSUER_ID="" +DEVELOPER_KEY_CONTENT="" + +FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD="" # Not needed for most users +TEMP_KEYCHAIN_USER = "keychain-user" +TEMP_KEYCHAIN_PASSWORD = "keychain-password" +DEVELOPER_APP_IDENTIFIER = "stream.yattee.app" + +# TestFlight +TESTFLIGHT_EXTERNAL_GROUPS=Testers,"Other Testers" # Comma separated list of external groups diff --git a/fastlane/Appfile b/fastlane/Appfile index 2d421f2f..7bef4899 100644 --- a/fastlane/Appfile +++ b/fastlane/Appfile @@ -1,5 +1,5 @@ -app_identifier("stream.yattee.app") # The bundle identifier of your app -apple_id(ENV['APPLE_ID']) # Your Apple email address +app_identifier(ENV['DEVELOPER_APP_IDENTIFIER']) # The bundle identifier of your app +apple_id(ENV['FASTLANE_USER']) # Your Apple email address itc_team_id(ENV['ITC_TEAM_ID']) # App Store Connect Team ID team_id(ENV['TEAM_ID']) # Developer Portal Team ID diff --git a/fastlane/Fastfile b/fastlane/Fastfile index fa737e15..8745a737 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -16,6 +16,32 @@ DEVELOPER_KEY_ID = ENV['DEVELOPER_KEY_ID'] DEVELOPER_KEY_ISSUER_ID = ENV['DEVELOPER_KEY_ISSUER_ID'] DEVELOPER_KEY_CONTENT = ENV['DEVELOPER_KEY_CONTENT'] +TEAM_ID = ENV['TEAM_ID'] +TEMP_KEYCHAIN_USER = ENV['TEMP_KEYCHAIN_USER'] +TEMP_KEYCHAIN_PASSWORD = ENV['TEMP_KEYCHAIN_PASSWORD'] +DEVELOPER_APP_IDENTIFIER = ENV['DEVELOPER_APP_IDENTIFIER'] +GIT_AUTHORIZATION = ENV['GIT_AUTHORIZATION'] +TESTFLIGHT_EXTERNAL_GROUPS = ENV['TESTFLIGHT_EXTERNAL_GROUPS'] + +def delete_temp_keychain(name) + delete_keychain( + name: name + ) if File.exist? File.expand_path("~/Library/Keychains/#{name}-db") +end + +def create_temp_keychain(name, password) + create_keychain( + name: name, + password: password, + unlock: false, + timeout: 0 + ) +end + +def ensure_temp_keychain(name, password) + delete_temp_keychain(name) + create_temp_keychain(name, password) +end add_extra_platforms(platforms: [:tvos]) @@ -23,10 +49,28 @@ before_all do update_fastlane end +desc "Bump build number and commit" +lane :bump_build do + increment_build_number + commit_version_bump( + message: "Bump build number to #{get_build_number}" + ) +end + +desc "Bump version number and commit" +lane :bump_version do + increment_version_number + commit_version_bump( + message: "Bump version number to #{get_version_number}" + ) +end + platform :ios do desc "Push a new beta build to TestFlight" lane :beta do - app_store_connect_api_key( + ensure_temp_keychain(TEMP_KEYCHAIN_USER, TEMP_KEYCHAIN_PASSWORD) + + api_key = app_store_connect_api_key( key_id: DEVELOPER_KEY_ID, issuer_id: DEVELOPER_KEY_ISSUER_ID, key_content: DEVELOPER_KEY_CONTENT @@ -38,16 +82,37 @@ platform :ios do target: "Yattee (iOS)" ) + match( + type: 'appstore', + platform: 'ios', + app_identifier: ["#{DEVELOPER_APP_IDENTIFIER}", "#{DEVELOPER_APP_IDENTIFIER}.Open-in-Yattee"], + git_basic_authorization: Base64.strict_encode64(GIT_AUTHORIZATION), + readonly: true, + keychain_name: TEMP_KEYCHAIN_USER, + keychain_password: TEMP_KEYCHAIN_PASSWORD, + api_key: api_key + ) + build_app( scheme: "Yattee (iOS)", output_directory: "fastlane/builds/#{version}-#{build}/iOS", output_name: "Yattee-#{version}-iOS.ipa", - xcargs: "-allowProvisioningUpdates" + export_options: { + provisioningProfiles: { + "#{DEVELOPER_APP_IDENTIFIER}" => "match AppStore #{DEVELOPER_APP_IDENTIFIER}", + "#{DEVELOPER_APP_IDENTIFIER}.Open-in-Yattee" => "match AppStore #{DEVELOPER_APP_IDENTIFIER}.Open-in-Yattee" + } + } ) - altool( - altool_app_type: "ios", - altool_ipa_path: lane_context[SharedValues::IPA_OUTPUT_PATH] + changelog = File.read('../CHANGELOG.md') + + upload_to_testflight( + api_key: api_key, + ipa: lane_context[SharedValues::IPA_OUTPUT_PATH], + distribute_external: true, + groups: TESTFLIGHT_EXTERNAL_GROUPS, + changelog: changelog ) end end @@ -55,7 +120,9 @@ end platform :tvos do desc "Push a new beta build to TestFlight" lane :beta do - app_store_connect_api_key( + ensure_temp_keychain(TEMP_KEYCHAIN_USER, TEMP_KEYCHAIN_PASSWORD) + + api_key = app_store_connect_api_key( key_id: DEVELOPER_KEY_ID, issuer_id: DEVELOPER_KEY_ISSUER_ID, key_content: DEVELOPER_KEY_CONTENT @@ -67,16 +134,37 @@ platform :tvos do target: "Yattee (tvOS)" ) + match( + type: 'appstore', + platform: 'tvos', + app_identifier: "#{DEVELOPER_APP_IDENTIFIER}", + git_basic_authorization: Base64.strict_encode64(GIT_AUTHORIZATION), + readonly: true, + keychain_name: TEMP_KEYCHAIN_USER, + keychain_password: TEMP_KEYCHAIN_PASSWORD, + api_key: api_key + ) + build_app( scheme: "Yattee (tvOS)", output_directory: "fastlane/builds/#{version}-#{build}/tvOS", output_name: "Yattee-#{version}-tvOS.ipa", - xcargs: "-allowProvisioningUpdates" + export_method: "app-store", + export_options: { + provisioningProfiles: { + "#{DEVELOPER_APP_IDENTIFIER}" => "match AppStore #{DEVELOPER_APP_IDENTIFIER} tvos" + } + } ) - altool( - altool_app_type: "tvos", - altool_ipa_path: lane_context[SharedValues::IPA_OUTPUT_PATH] + changelog = File.read('../CHANGELOG.md') + + upload_to_testflight( + api_key: api_key, + ipa: lane_context[SharedValues::IPA_OUTPUT_PATH], + distribute_external: true, + groups: TESTFLIGHT_EXTERNAL_GROUPS, + changelog: changelog ) end end @@ -84,7 +172,9 @@ end platform :mac do desc "Push a new beta build to TestFlight" lane :beta do - app_store_connect_api_key( + ensure_temp_keychain(TEMP_KEYCHAIN_USER, TEMP_KEYCHAIN_PASSWORD) + + api_key = app_store_connect_api_key( key_id: DEVELOPER_KEY_ID, issuer_id: DEVELOPER_KEY_ISSUER_ID, key_content: DEVELOPER_KEY_CONTENT @@ -96,16 +186,84 @@ platform :mac do target: "Yattee (macOS)" ) + match( + type: 'appstore', + platform: 'macos', + additional_cert_types: ['mac_installer_distribution'], + app_identifier: "#{DEVELOPER_APP_IDENTIFIER}", + git_basic_authorization: Base64.strict_encode64(GIT_AUTHORIZATION), + readonly: true, + keychain_name: TEMP_KEYCHAIN_USER, + keychain_password: TEMP_KEYCHAIN_PASSWORD, + api_key: api_key + ) + build_app( scheme: "Yattee (macOS)", output_directory: "fastlane/builds/#{version}-#{build}/macOS", output_name: "Yattee-#{version}-macOS.app", - xcargs: "-allowProvisioningUpdates" + export_method: "app-store", + export_options: { + provisioningProfiles: { + "#{DEVELOPER_APP_IDENTIFIER}" => "match AppStore #{DEVELOPER_APP_IDENTIFIER} macos" + } + } ) - altool( - altool_app_type: "macos", - altool_ipa_path: lane_context[SharedValues::PKG_OUTPUT_PATH] + changelog = File.read('../CHANGELOG.md') + + upload_to_testflight( + api_key: api_key, + pkg: lane_context[SharedValues::PKG_OUTPUT_PATH], + distribute_external: true, + groups: TESTFLIGHT_EXTERNAL_GROUPS, + changelog: changelog + ) + end + + desc "Build for Developer ID distribution and notarize" + lane :build_and_notarize do + ensure_temp_keychain(TEMP_KEYCHAIN_USER, TEMP_KEYCHAIN_PASSWORD) + + api_key = app_store_connect_api_key( + key_id: DEVELOPER_KEY_ID, + issuer_id: DEVELOPER_KEY_ISSUER_ID, + key_content: DEVELOPER_KEY_CONTENT + ) + + build = get_build_number(xcodeproj: "Yattee.xcodeproj") + version = get_version_number( + xcodeproj: "Yattee.xcodeproj", + target: "Yattee (macOS)" + ) + + match( + type: 'developer_id', + platform: 'macos', + app_identifier: "#{DEVELOPER_APP_IDENTIFIER}", + git_basic_authorization: Base64.strict_encode64(GIT_AUTHORIZATION), + readonly: true, + keychain_name: TEMP_KEYCHAIN_USER, + keychain_password: TEMP_KEYCHAIN_PASSWORD, + api_key: api_key + ) + + build_mac_app( + scheme: "Yattee (macOS)", + output_directory: "fastlane/builds/#{version}-#{build}/macOS", + output_name: "Yattee", + export_method: "developer-id", + export_options: { + provisioningProfiles: { + "#{DEVELOPER_APP_IDENTIFIER}" => "match Direct #{DEVELOPER_APP_IDENTIFIER} macos" + } + } + ) + + notarize( + package: "fastlane/builds/#{version}-#{build}/macOS/Yattee.app", + bundle_id: "#{DEVELOPER_APP_IDENTIFIER}", + api_key: api_key, ) end end diff --git a/fastlane/Matchfile b/fastlane/Matchfile new file mode 100644 index 00000000..3bd395c4 --- /dev/null +++ b/fastlane/Matchfile @@ -0,0 +1,13 @@ +git_url(ENV['CERTIFICATES_GIT_URL']) + +storage_mode("git") + +type("appstore") # 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/fastlane/Pluginfile b/fastlane/Pluginfile index 228fbe70..273a6b6f 100644 --- a/fastlane/Pluginfile +++ b/fastlane/Pluginfile @@ -1,5 +1,3 @@ # Autogenerated by fastlane # # Ensure this file is checked in to source control! - -gem 'fastlane-plugin-altool', git: "git@github.com:yattee/fastlane-plugin-altool.git" diff --git a/fastlane/README.md b/fastlane/README.md index 6f534575..27d5d38c 100644 --- a/fastlane/README.md +++ b/fastlane/README.md @@ -13,6 +13,25 @@ For _fastlane_ installation instructions, see [Installing _fastlane_](https://do # Available Actions +### bump_build + +```sh +[bundle exec] fastlane bump_build +``` + +Bump build number and commit + +### bump_version + +```sh +[bundle exec] fastlane bump_version +``` + +Bump version number and commit + +---- + + ## iOS ### ios beta @@ -49,6 +68,14 @@ Push a new beta build to TestFlight Push a new beta build to TestFlight +### mac build_and_notarize + +```sh +[bundle exec] fastlane mac build_and_notarize +``` + +Build for Developer ID distribution and notarize + ---- This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.