Compare commits

...

10 Commits

Author SHA1 Message Date
github-actions[bot]
75ac11c60d Bump build number to 137 2023-02-25 21:29:30 +00:00
Arkadiusz Fal
0d3138b36e Update release workflow 2023-02-25 22:18:24 +01:00
Arkadiusz Fal
582f07388e Update changelog 2023-02-25 17:21:23 +01:00
Arkadiusz Fal
2b18f0cffa Add hiding short videos 2023-02-25 17:18:35 +01:00
Arkadiusz Fal
ef401168ec Use only tab navigation on iPhone 2023-02-25 16:46:09 +01:00
Arkadiusz Fal
0c7af0351b Add bump build action 2023-02-25 14:51:50 +01:00
Arkadiusz Fal
0995e3ee2f Add Arabic, Portugese and Portugese (Brazil) localizations 2023-02-25 14:51:50 +01:00
Arkadiusz Fal
cbd95ebc58 Update xcodeproj 2023-02-25 14:51:50 +01:00
Arkadiusz Fal
528863bf1b Update release workflow 2023-02-25 14:51:50 +01:00
Arkadiusz Fal
c931aa09a2 Update packages 2023-02-25 14:51:50 +01:00
28 changed files with 319 additions and 105 deletions

View File

@@ -1,10 +1,9 @@
name: Build and release to TestFlight and GitHub name: Build and release to TestFlight and GitHub
on: on:
push:
branches: [ main ]
workflow_dispatch: workflow_dispatch:
env: env:
APP_NAME: Yattee
FASTLANE_USER: ${{ secrets.FASTLANE_USER }} FASTLANE_USER: ${{ secrets.FASTLANE_USER }}
FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }} FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }}
ITC_TEAM_ID: ${{ secrets.ITC_TEAM_ID }} ITC_TEAM_ID: ${{ secrets.ITC_TEAM_ID }}
@@ -21,7 +20,29 @@ env:
TESTFLIGHT_EXTERNAL_GROUPS: ${{ secrets.TESTFLIGHT_EXTERNAL_GROUPS }} TESTFLIGHT_EXTERNAL_GROUPS: ${{ secrets.TESTFLIGHT_EXTERNAL_GROUPS }}
jobs: jobs:
bump_build:
name: Bump build number
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- name: Configure git
run: |
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
- uses: ruby/setup-ruby@v1
with:
ruby-version: '3.0'
bundler-cache: true
- uses: maierj/fastlane-action@v3.0.0
with:
lane: bump_build
- name: Push changes
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.GIT_AUTHORIZATION }}
branch: ${{ github.ref }}
testflight: testflight:
needs: bump_build
strategy: strategy:
matrix: matrix:
lane: ['mac beta', 'ios beta', 'tvos beta'] lane: ['mac beta', 'ios beta', 'tvos beta']
@@ -29,6 +50,8 @@ jobs:
runs-on: macos-latest runs-on: macos-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
with:
ref: main
- uses: ruby/setup-ruby@v1 - uses: ruby/setup-ruby@v1
with: with:
ruby-version: '3.0' ruby-version: '3.0'
@@ -46,10 +69,13 @@ jobs:
path: fastlane/builds/**/*.ipa path: fastlane/builds/**/*.ipa
if-no-files-found: ignore if-no-files-found: ignore
mac_notarized: mac_notarized:
needs: bump_build
name: Build and notarize macOS app name: Build and notarize macOS app
runs-on: macos-latest runs-on: macos-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
with:
ref: main
- uses: ruby/setup-ruby@v1 - uses: ruby/setup-ruby@v1
with: with:
ruby-version: '3.0' ruby-version: '3.0'
@@ -75,11 +101,13 @@ jobs:
path: ${{ env.ZIP_PATH }} path: ${{ env.ZIP_PATH }}
if-no-files-found: error if-no-files-found: error
release: release:
needs: ['testflight', 'mac_notarized'] needs: ['bump_build', 'testflight', 'mac_notarized']
name: Create GitHub release name: Create GitHub release
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
with:
ref: main
- 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 "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 - 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 - uses: actions/download-artifact@v3

4
.gitignore vendored
View File

@@ -97,3 +97,7 @@ iOSInjectionProject/
# User-specific xcconfig files # User-specific xcconfig files
Xcode-config/DEVELOPMENT_TEAM.xcconfig Xcode-config/DEVELOPMENT_TEAM.xcconfig
# Bundler
.bundle/
Vendor/bundle/

1
AS_CONNECT_BUILD_VERSION Normal file
View File

@@ -0,0 +1 @@
137

View File

@@ -11,10 +11,10 @@ extension Backport where Content: View {
} }
@ViewBuilder func scrollDismissesKeyboardInteractively() -> some View { @ViewBuilder func scrollDismissesKeyboardInteractively() -> some View {
if #available(iOS 16.0, macOS 13.0, tvOS 16.0, *) { if #available(iOS 16.0, macOS 13.0, tvOS 16.0, *) {
content.scrollDismissesKeyboard(.interactively) content.scrollDismissesKeyboard(.interactively)
} else { } else {
content content
}
} }
}
} }

View File

@@ -1,4 +1,10 @@
## Build 136 ## Build 137
* Added filter to hide Short videos, available via view menu/toolbar button
* Added localizations: Arabic, Portugese, Portuguese (Brazil)
* Fixed reported crashes
* Other minor changes and improvements
### Previous Builds
* Fixed issue with loading channels in Favorites with Invidious * Fixed issue with loading channels in Favorites with Invidious
* Other minor changes and improvements * Other minor changes and improvements

View File

@@ -211,6 +211,7 @@ GEM
PLATFORMS PLATFORMS
arm64-darwin-21 arm64-darwin-21
x86_64-darwin-19 x86_64-darwin-19
x86_64-linux
DEPENDENCIES DEPENDENCIES
fastlane fastlane

View File

@@ -461,6 +461,7 @@ final class InvidiousAPI: Service, ObservableObject, VideosAPI {
} }
let description = json["description"].stringValue let description = json["description"].stringValue
let length = json["lengthSeconds"].doubleValue
return Video( return Video(
instanceID: account.instanceID, instanceID: account.instanceID,
@@ -470,7 +471,7 @@ final class InvidiousAPI: Service, ObservableObject, VideosAPI {
videoID: videoID, videoID: videoID,
title: json["title"].stringValue, title: json["title"].stringValue,
author: json["author"].stringValue, author: json["author"].stringValue,
length: json["lengthSeconds"].doubleValue, length: length,
published: published, published: published,
views: json["viewCount"].intValue, views: json["viewCount"].intValue,
description: description, description: description,
@@ -480,6 +481,7 @@ final class InvidiousAPI: Service, ObservableObject, VideosAPI {
indexID: indexID, indexID: indexID,
live: json["liveNow"].boolValue, live: json["liveNow"].boolValue,
upcoming: json["isUpcoming"].boolValue, upcoming: json["isUpcoming"].boolValue,
short: length <= Video.shortLength,
publishedAt: publishedAt, publishedAt: publishedAt,
likes: json["likeCount"].int, likes: json["likeCount"].int,
dislikes: json["dislikeCount"].int, dislikes: json["dislikeCount"].int,

View File

@@ -481,6 +481,8 @@ final class PipedAPI: Service, ObservableObject, VideosAPI {
chapters = extractChapters(from: description) chapters = extractChapters(from: description)
} }
let length = details["duration"]?.double ?? 0
return Video( return Video(
instanceID: account.instanceID, instanceID: account.instanceID,
app: .piped, app: .piped,
@@ -488,13 +490,14 @@ final class PipedAPI: Service, ObservableObject, VideosAPI {
videoID: extractID(from: content), videoID: extractID(from: content),
title: details["title"]?.string ?? "", title: details["title"]?.string ?? "",
author: author, author: author,
length: details["duration"]?.double ?? 0, length: length,
published: published ?? "", published: published ?? "",
views: details["views"]?.int ?? 0, views: details["views"]?.int ?? 0,
description: description, description: description,
channel: Channel(app: .piped, id: channelId, name: author, thumbnailURL: authorThumbnailURL, subscriptionsCount: subscriptionsCount), channel: Channel(app: .piped, id: channelId, name: author, thumbnailURL: authorThumbnailURL, subscriptionsCount: subscriptionsCount),
thumbnails: thumbnails, thumbnails: thumbnails,
live: live, live: live,
short: details["isShort"]?.bool ?? (length <= Video.shortLength),
likes: details["likes"]?.int, likes: details["likes"]?.int,
dislikes: details["dislikes"]?.int, dislikes: details["dislikes"]?.int,
streams: extractStreams(from: content), streams: extractStreams(from: content),

View File

@@ -1,5 +1,6 @@
import Cache import Cache
import CoreData import CoreData
import Defaults
import Foundation import Foundation
import Siesta import Siesta
import SwiftyJSON import SwiftyJSON
@@ -237,6 +238,10 @@ final class FeedModel: ObservableObject, CacheModel {
let watches = watchFetchRequestResult(videos, context: backgroundContext) let watches = watchFetchRequestResult(videos, context: backgroundContext)
let watchesIDs = watches.map(\.videoID) let watchesIDs = watches.map(\.videoID)
let unwatched = videos.filter { video in let unwatched = videos.filter { video in
if Defaults[.hideShorts], video.short {
return false
}
if !watchesIDs.contains(video.videoID) { if !watchesIDs.contains(video.videoID) {
return true return true
} }

View File

@@ -5,6 +5,8 @@ import SwiftUI
import SwiftyJSON import SwiftyJSON
struct Video: Identifiable, Equatable, Hashable { struct Video: Identifiable, Equatable, Hashable {
static let shortLength = 61.0
enum VideoID { enum VideoID {
static func isValid(_ id: Video.ID) -> Bool { static func isValid(_ id: Video.ID) -> Bool {
isYouTube(id) || isPeerTube(id) isYouTube(id) || isPeerTube(id)
@@ -40,6 +42,7 @@ struct Video: Identifiable, Equatable, Hashable {
var live: Bool var live: Bool
var upcoming: Bool var upcoming: Bool
var short: Bool
var streams = [Stream]() var streams = [Stream]()
@@ -74,6 +77,7 @@ struct Video: Identifiable, Equatable, Hashable {
indexID: String? = nil, indexID: String? = nil,
live: Bool = false, live: Bool = false,
upcoming: Bool = false, upcoming: Bool = false,
short: Bool = false,
publishedAt: Date? = nil, publishedAt: Date? = nil,
likes: Int? = nil, likes: Int? = nil,
dislikes: Int? = nil, dislikes: Int? = nil,
@@ -101,6 +105,7 @@ struct Video: Identifiable, Equatable, Hashable {
self.indexID = indexID self.indexID = indexID
self.live = live self.live = live
self.upcoming = upcoming self.upcoming = upcoming
self.short = short
self.publishedAt = publishedAt self.publishedAt = publishedAt
self.likes = likes self.likes = likes
self.dislikes = dislikes self.dislikes = dislikes
@@ -154,6 +159,7 @@ struct Video: Identifiable, Equatable, Hashable {
"indexID": indexID ?? "", "indexID": indexID ?? "",
"live": live, "live": live,
"upcoming": upcoming, "upcoming": upcoming,
"short": short,
"publishedAt": publishedAt "publishedAt": publishedAt
] ]
} }
@@ -180,6 +186,7 @@ struct Video: Identifiable, Equatable, Hashable {
indexID: json["indexID"].stringValue, indexID: json["indexID"].stringValue,
live: json["live"].boolValue, live: json["live"].boolValue,
upcoming: json["upcoming"].boolValue, upcoming: json["upcoming"].boolValue,
short: json["short"].boolValue,
publishedAt: dateFormatter.date(from: json["publishedAt"].stringValue) publishedAt: dateFormatter.date(from: json["publishedAt"].stringValue)
) )
} }

View File

@@ -14,6 +14,7 @@ struct ChannelPlaylistView: View {
@Environment(\.colorScheme) private var colorScheme @Environment(\.colorScheme) private var colorScheme
@Environment(\.navigationStyle) private var navigationStyle @Environment(\.navigationStyle) private var navigationStyle
@Default(.channelPlaylistListingStyle) private var channelPlaylistListingStyle @Default(.channelPlaylistListingStyle) private var channelPlaylistListingStyle
@Default(.hideShorts) private var hideShorts
@ObservedObject private var accounts = AccountsModel.shared @ObservedObject private var accounts = AccountsModel.shared
var player = PlayerModel.shared var player = PlayerModel.shared
@@ -104,6 +105,7 @@ struct ChannelPlaylistView: View {
ToolbarItem(placement: playlistButtonsPlacement) { ToolbarItem(placement: playlistButtonsPlacement) {
HStack { HStack {
ListingStyleButtons(listingStyle: $channelPlaylistListingStyle) ListingStyleButtons(listingStyle: $channelPlaylistListingStyle)
HideShortsButtons(hide: $hideShorts)
ShareButton(contentItem: contentItem) ShareButton(contentItem: contentItem)
favoriteButton favoriteButton
@@ -131,6 +133,10 @@ struct ChannelPlaylistView: View {
ListingStyleButtons(listingStyle: $channelPlaylistListingStyle) ListingStyleButtons(listingStyle: $channelPlaylistListingStyle)
Section {
HideShortsButtons(hide: $hideShorts)
}
Section { Section {
SettingsButtons() SettingsButtons()
} }

View File

@@ -32,6 +32,7 @@ struct ChannelVideosView: View {
@Default(.channelPlaylistListingStyle) private var channelPlaylistListingStyle @Default(.channelPlaylistListingStyle) private var channelPlaylistListingStyle
@Default(.expandChannelDescription) private var expandChannelDescription @Default(.expandChannelDescription) private var expandChannelDescription
@Default(.hideShorts) private var hideShorts
var presentedChannel: Channel? { var presentedChannel: Channel? {
store.item ?? channel ?? recents.presentedChannel store.item ?? channel ?? recents.presentedChannel
@@ -100,6 +101,7 @@ struct ChannelVideosView: View {
} }
.environment(\.inChannelView, true) .environment(\.inChannelView, true)
.environment(\.listingStyle, channelPlaylistListingStyle) .environment(\.listingStyle, channelPlaylistListingStyle)
.environment(\.hideShorts, hideShorts)
#if os(tvOS) #if os(tvOS)
.prefersDefaultFocus(in: focusNamespace) .prefersDefaultFocus(in: focusNamespace)
#endif #endif
@@ -131,6 +133,9 @@ struct ChannelVideosView: View {
ToolbarItem { ToolbarItem {
ListingStyleButtons(listingStyle: $channelPlaylistListingStyle) ListingStyleButtons(listingStyle: $channelPlaylistListingStyle)
} }
ToolbarItem {
HideShortsButtons(hide: $hideShorts)
}
ToolbarItem { ToolbarItem {
contentTypePicker contentTypePicker
} }
@@ -271,6 +276,10 @@ struct ChannelVideosView: View {
} }
ListingStyleButtons(listingStyle: $channelPlaylistListingStyle) ListingStyleButtons(listingStyle: $channelPlaylistListingStyle)
Section {
HideShortsButtons(hide: $hideShorts)
}
} }
} label: { } label: {
HStack(spacing: 12) { HStack(spacing: 12) {

View File

@@ -5,6 +5,14 @@ import SwiftUI
struct Constants { struct Constants {
static let yatteeProtocol = "yattee://" static let yatteeProtocol = "yattee://"
static let overlayAnimation = Animation.linear(duration: 0.2) static let overlayAnimation = Animation.linear(duration: 0.2)
static var isIPhone: Bool {
#if os(iOS)
UIDevice.current.userInterfaceIdiom == .phone
#else
false
#endif
}
static var progressViewScale: Double { static var progressViewScale: Double {
#if os(macOS) #if os(macOS)
0.4 0.4

View File

@@ -238,6 +238,8 @@ extension Defaults.Keys {
static let openWatchNextOnFinishedWatching = Key<Bool>("openWatchNextOnFinishedWatching", default: true) static let openWatchNextOnFinishedWatching = Key<Bool>("openWatchNextOnFinishedWatching", default: true)
static let openWatchNextOnClose = Key<Bool>("openWatchNextOnClose", default: false) static let openWatchNextOnClose = Key<Bool>("openWatchNextOnClose", default: false)
static let openWatchNextOnFinishedWatchingDelay = Key<String>("openWatchNextOnFinishedWatchingDelay", default: "5") static let openWatchNextOnFinishedWatchingDelay = Key<String>("openWatchNextOnFinishedWatchingDelay", default: "5")
static let hideShorts = Key<Bool>("hideShorts", default: false)
} }
enum ResolutionSetting: String, CaseIterable, Defaults.Serializable { enum ResolutionSetting: String, CaseIterable, Defaults.Serializable {

View File

@@ -66,6 +66,10 @@ private struct ScrollViewBottomPaddingKey: EnvironmentKey {
static let defaultValue: Double = 30 static let defaultValue: Double = 30
} }
private struct HideShortsKey: EnvironmentKey {
static let defaultValue = false
}
extension EnvironmentValues { extension EnvironmentValues {
var inChannelView: Bool { var inChannelView: Bool {
get { self[InChannelViewKey.self] } get { self[InChannelViewKey.self] }
@@ -121,4 +125,9 @@ extension EnvironmentValues {
get { self[NoListingDividersKey.self] } get { self[NoListingDividersKey.self] }
set { self[NoListingDividersKey.self] = newValue } set { self[NoListingDividersKey.self] = newValue }
} }
var hideShorts: Bool {
get { self[HideShortsKey.self] }
set { self[HideShortsKey.self] = newValue }
}
} }

View File

@@ -25,10 +25,14 @@ struct ContentView: View {
var body: some View { var body: some View {
Group { Group {
#if os(iOS) #if os(iOS)
if horizontalSizeClass == .compact { if Constants.isIPhone {
AppTabNavigation() AppTabNavigation()
} else { } else {
AppSidebarNavigation() if horizontalSizeClass == .compact {
AppTabNavigation()
} else {
AppSidebarNavigation()
}
} }
#elseif os(macOS) #elseif os(macOS)
AppSidebarNavigation() AppSidebarNavigation()

View File

@@ -24,6 +24,7 @@ struct PlaylistsView: View {
@Default(.playlistListingStyle) private var playlistListingStyle @Default(.playlistListingStyle) private var playlistListingStyle
@Default(.showCacheStatus) private var showCacheStatus @Default(.showCacheStatus) private var showCacheStatus
@Default(.hideShorts) private var hideShorts
var items: [ContentItem] { var items: [ContentItem] {
var videos = currentPlaylist?.videos ?? [] var videos = currentPlaylist?.videos ?? []
@@ -95,6 +96,7 @@ struct PlaylistsView: View {
} }
.environment(\.currentPlaylistID, currentPlaylist?.id) .environment(\.currentPlaylistID, currentPlaylist?.id)
.environment(\.listingStyle, playlistListingStyle) .environment(\.listingStyle, playlistListingStyle)
.environment(\.hideShorts, hideShorts)
} }
} }
} }
@@ -167,6 +169,9 @@ struct PlaylistsView: View {
ToolbarItem { ToolbarItem {
ListingStyleButtons(listingStyle: $playlistListingStyle) ListingStyleButtons(listingStyle: $playlistListingStyle)
} }
ToolbarItem {
HideShortsButtons(hide: $hideShorts)
}
} }
#else #else
.onReceive(NotificationCenter.default.publisher(for: UIApplication.willEnterForegroundNotification)) { _ in .onReceive(NotificationCenter.default.publisher(for: UIApplication.willEnterForegroundNotification)) { _ in
@@ -234,6 +239,10 @@ struct PlaylistsView: View {
ListingStyleButtons(listingStyle: $playlistListingStyle) ListingStyleButtons(listingStyle: $playlistListingStyle)
Section {
HideShortsButtons(hide: $hideShorts)
}
Section { Section {
SettingsButtons() SettingsButtons()
} }

View File

@@ -30,6 +30,7 @@ struct SearchView: View {
@Default(.saveRecents) private var saveRecents @Default(.saveRecents) private var saveRecents
@Default(.showHome) private var showHome @Default(.showHome) private var showHome
@Default(.searchListingStyle) private var searchListingStyle @Default(.searchListingStyle) private var searchListingStyle
@Default(.hideShorts) private var hideShorts
private var videos = [Video]() private var videos = [Video]()
@@ -70,10 +71,12 @@ struct SearchView: View {
#endif #endif
} }
.environment(\.listingStyle, searchListingStyle) .environment(\.listingStyle, searchListingStyle)
.environment(\.hideShorts, hideShorts)
.toolbar { .toolbar {
#if os(macOS) #if os(macOS)
ToolbarItemGroup(placement: toolbarPlacement) { ToolbarItemGroup(placement: toolbarPlacement) {
ListingStyleButtons(listingStyle: $searchListingStyle) ListingStyleButtons(listingStyle: $searchListingStyle)
HideShortsButtons(hide: $hideShorts)
FavoriteButton(item: favoriteItem) FavoriteButton(item: favoriteItem)
.id(favoriteItem?.id) .id(favoriteItem?.id)
@@ -210,6 +213,10 @@ struct SearchView: View {
ListingStyleButtons(listingStyle: $searchListingStyle) ListingStyleButtons(listingStyle: $searchListingStyle)
Section {
HideShortsButtons(hide: $hideShorts)
}
Section { Section {
SettingsButtons() SettingsButtons()
} }

View File

@@ -10,6 +10,7 @@ struct FeedView: View {
#if os(tvOS) #if os(tvOS)
@Default(.subscriptionsListingStyle) private var subscriptionsListingStyle @Default(.subscriptionsListingStyle) private var subscriptionsListingStyle
@Default(.hideShorts) private var hideShorts
#endif #endif
var videos: [ContentItem] { var videos: [ContentItem] {
@@ -54,6 +55,7 @@ struct FeedView: View {
#if os(tvOS) #if os(tvOS)
SubscriptionsPageButton() SubscriptionsPageButton()
ListingStyleButtons(listingStyle: $subscriptionsListingStyle) ListingStyleButtons(listingStyle: $subscriptionsListingStyle)
HideShortsButtons(hide: $hideShorts)
#endif #endif
if showCacheStatus { if showCacheStatus {
@@ -82,6 +84,7 @@ struct FeedView: View {
.padding(.leading, 30) .padding(.leading, 30)
#if os(tvOS) #if os(tvOS)
.padding(.bottom, 15) .padding(.bottom, 15)
.padding(.trailing, 30)
#endif #endif
} }
@@ -94,7 +97,7 @@ struct FeedView: View {
} }
} }
struct SubscriptonsView_Previews: PreviewProvider { struct FeedView_Previews: PreviewProvider {
static var previews: some View { static var previews: some View {
NavigationView { NavigationView {
FeedView() FeedView()

View File

@@ -10,6 +10,7 @@ struct SubscriptionsView: View {
@Default(.subscriptionsViewPage) private var subscriptionsViewPage @Default(.subscriptionsViewPage) private var subscriptionsViewPage
@Default(.subscriptionsListingStyle) private var subscriptionsListingStyle @Default(.subscriptionsListingStyle) private var subscriptionsListingStyle
@Default(.hideShorts) private var hideShorts
@ObservedObject private var feed = FeedModel.shared @ObservedObject private var feed = FeedModel.shared
@ObservedObject private var subscriptions = SubscribedChannelsModel.shared @ObservedObject private var subscriptions = SubscribedChannelsModel.shared
@@ -27,6 +28,7 @@ struct SubscriptionsView: View {
} }
} }
.environment(\.listingStyle, subscriptionsListingStyle) .environment(\.listingStyle, subscriptionsListingStyle)
.environment(\.hideShorts, hideShorts)
#if os(iOS) #if os(iOS)
.navigationBarTitleDisplayMode(.inline) .navigationBarTitleDisplayMode(.inline)
@@ -46,6 +48,10 @@ struct SubscriptionsView: View {
ListingStyleButtons(listingStyle: $subscriptionsListingStyle) ListingStyleButtons(listingStyle: $subscriptionsListingStyle)
} }
ToolbarItem {
HideShortsButtons(hide: $hideShorts)
}
ToolbarItem { ToolbarItem {
toggleWatchedButton toggleWatchedButton
} }
@@ -73,6 +79,10 @@ struct SubscriptionsView: View {
ListingStyleButtons(listingStyle: $subscriptionsListingStyle) ListingStyleButtons(listingStyle: $subscriptionsListingStyle)
} }
Section {
HideShortsButtons(hide: $hideShorts)
}
playUnwatchedButton playUnwatchedButton
toggleWatchedButton toggleWatchedButton

View File

@@ -10,6 +10,7 @@ struct TrendingView: View {
@Default(.trendingCountry) private var country @Default(.trendingCountry) private var country
@Default(.trendingListingStyle) private var trendingListingStyle @Default(.trendingListingStyle) private var trendingListingStyle
@Default(.hideShorts) private var hideShorts
@State private var presentingCountrySelection = false @State private var presentingCountrySelection = false
@@ -51,6 +52,7 @@ struct TrendingView: View {
#endif #endif
} }
.environment(\.listingStyle, trendingListingStyle) .environment(\.listingStyle, trendingListingStyle)
.environment(\.hideShorts, hideShorts)
} }
.toolbar { .toolbar {
@@ -133,6 +135,10 @@ struct TrendingView: View {
ToolbarItem { ToolbarItem {
ListingStyleButtons(listingStyle: $trendingListingStyle) ListingStyleButtons(listingStyle: $trendingListingStyle)
} }
ToolbarItem {
HideShortsButtons(hide: $hideShorts)
}
} }
#else #else
.onReceive(NotificationCenter.default.publisher(for: UIApplication.willEnterForegroundNotification)) { _ in .onReceive(NotificationCenter.default.publisher(for: UIApplication.willEnterForegroundNotification)) { _ in
@@ -182,6 +188,10 @@ struct TrendingView: View {
ListingStyleButtons(listingStyle: $trendingListingStyle) ListingStyleButtons(listingStyle: $trendingListingStyle)
Section {
HideShortsButtons(hide: $hideShorts)
}
Section { Section {
SettingsButtons() SettingsButtons()
} }

View File

@@ -5,21 +5,32 @@ struct ContentItemView: View {
let item: ContentItem let item: ContentItem
@Environment(\.listingStyle) private var listingStyle @Environment(\.listingStyle) private var listingStyle
@Environment(\.noListingDividers) private var noListingDividers @Environment(\.noListingDividers) private var noListingDividers
@Environment(\.hideShorts) private var hideShorts
var body: some View { @ViewBuilder var body: some View {
Group { if itemVisible {
switch item.contentType { Group {
case .video: switch item.contentType {
videoItem(item.video) case .video:
case .channel: videoItem(item.video)
channelItem(item.channel) case .channel:
case .playlist: channelItem(item.channel)
playlistItem(item.playlist) case .playlist:
default: playlistItem(item.playlist)
placeholderItem() default:
placeholderItem()
}
} }
.id(item.cacheKey)
} }
.id(item.cacheKey) }
var itemVisible: Bool {
guard hideShorts, item.contentType == .video, let video = item.video else {
return true
}
return !video.short
} }
@ViewBuilder func videoItem(_ video: Video) -> some View { @ViewBuilder func videoItem(_ video: Video) -> some View {

View File

@@ -0,0 +1,33 @@
import SwiftUI
struct HideShortsButtons: View {
@Binding var hide: Bool
var body: some View {
Button {
hide.toggle()
} label: {
Group {
if hide {
Label("Short videos: hidden", systemImage: "bolt.slash.fill")
.help("Short videos: hidden")
} else {
Label("Short videos: visible", systemImage: "bolt.fill")
.help("Short videos: visible")
}
}
#if os(tvOS)
.font(.caption2)
.imageScale(.small)
#endif
}
}
}
struct HideShortsButtons_Previews: PreviewProvider {
static var previews: some View {
VStack {
HideShortsButtons(hide: .constant(true))
}
}
}

View File

@@ -10,6 +10,7 @@ struct PopularView: View {
@State private var error: RequestError? @State private var error: RequestError?
@Default(.popularListingStyle) private var popularListingStyle @Default(.popularListingStyle) private var popularListingStyle
@Default(.hideShorts) private var hideShorts
var resource: Resource? { var resource: Resource? {
accounts.api.popular accounts.api.popular
@@ -69,6 +70,10 @@ struct PopularView: View {
ToolbarItem { ToolbarItem {
ListingStyleButtons(listingStyle: $popularListingStyle) ListingStyleButtons(listingStyle: $popularListingStyle)
} }
ToolbarItem {
HideShortsButtons(hide: $hideShorts)
}
} }
#else #else
.onReceive(NotificationCenter.default.publisher(for: UIApplication.willEnterForegroundNotification)) { _ in .onReceive(NotificationCenter.default.publisher(for: UIApplication.willEnterForegroundNotification)) { _ in
@@ -84,6 +89,10 @@ struct PopularView: View {
Menu { Menu {
ListingStyleButtons(listingStyle: $popularListingStyle) ListingStyleButtons(listingStyle: $popularListingStyle)
Section {
HideShortsButtons(hide: $hideShorts)
}
Section { Section {
SettingsButtons() SettingsButtons()
} }

View File

@@ -679,6 +679,9 @@
379DC3D128BA4EB400B09677 /* Seek.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379DC3D028BA4EB400B09677 /* Seek.swift */; }; 379DC3D128BA4EB400B09677 /* Seek.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379DC3D028BA4EB400B09677 /* Seek.swift */; };
379DC3D228BA4EB400B09677 /* Seek.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379DC3D028BA4EB400B09677 /* Seek.swift */; }; 379DC3D228BA4EB400B09677 /* Seek.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379DC3D028BA4EB400B09677 /* Seek.swift */; };
379DC3D328BA4EB400B09677 /* Seek.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379DC3D028BA4EB400B09677 /* Seek.swift */; }; 379DC3D328BA4EB400B09677 /* Seek.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379DC3D028BA4EB400B09677 /* Seek.swift */; };
379EF9E029AA585F009FE6C6 /* HideShortsButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379EF9DF29AA585F009FE6C6 /* HideShortsButtons.swift */; };
379EF9E129AA585F009FE6C6 /* HideShortsButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379EF9DF29AA585F009FE6C6 /* HideShortsButtons.swift */; };
379EF9E229AA585F009FE6C6 /* HideShortsButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379EF9DF29AA585F009FE6C6 /* HideShortsButtons.swift */; };
379F141F289ECE7F00DE48B5 /* QualitySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379F141E289ECE7F00DE48B5 /* QualitySettings.swift */; }; 379F141F289ECE7F00DE48B5 /* QualitySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379F141E289ECE7F00DE48B5 /* QualitySettings.swift */; };
379F1420289ECE7F00DE48B5 /* QualitySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379F141E289ECE7F00DE48B5 /* QualitySettings.swift */; }; 379F1420289ECE7F00DE48B5 /* QualitySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379F141E289ECE7F00DE48B5 /* QualitySettings.swift */; };
379F1421289ECE7F00DE48B5 /* QualitySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379F141E289ECE7F00DE48B5 /* QualitySettings.swift */; }; 379F1421289ECE7F00DE48B5 /* QualitySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379F141E289ECE7F00DE48B5 /* QualitySettings.swift */; };
@@ -1364,6 +1367,7 @@
37992DC726CC50BC003D4C27 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 37992DC726CC50BC003D4C27 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
379B0252287A1CDF001015B5 /* OrientationTracker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrientationTracker.swift; sourceTree = "<group>"; }; 379B0252287A1CDF001015B5 /* OrientationTracker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrientationTracker.swift; sourceTree = "<group>"; };
379DC3D028BA4EB400B09677 /* Seek.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Seek.swift; sourceTree = "<group>"; }; 379DC3D028BA4EB400B09677 /* Seek.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Seek.swift; sourceTree = "<group>"; };
379EF9DF29AA585F009FE6C6 /* HideShortsButtons.swift */ = {isa = PBXFileReference; indentWidth = 3; lastKnownFileType = sourcecode.swift; path = HideShortsButtons.swift; sourceTree = "<group>"; };
379F141E289ECE7F00DE48B5 /* QualitySettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QualitySettings.swift; sourceTree = "<group>"; }; 379F141E289ECE7F00DE48B5 /* QualitySettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QualitySettings.swift; sourceTree = "<group>"; };
37A2B345294723850050933E /* CacheModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CacheModel.swift; sourceTree = "<group>"; }; 37A2B345294723850050933E /* CacheModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CacheModel.swift; sourceTree = "<group>"; };
37A362B92953707F00BDF328 /* ClearQueueButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClearQueueButton.swift; sourceTree = "<group>"; }; 37A362B92953707F00BDF328 /* ClearQueueButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClearQueueButton.swift; sourceTree = "<group>"; };
@@ -1477,6 +1481,9 @@
37E70926271CDDAE00D34DDE /* OpenSettingsButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenSettingsButton.swift; sourceTree = "<group>"; }; 37E70926271CDDAE00D34DDE /* OpenSettingsButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenSettingsButton.swift; sourceTree = "<group>"; };
37E80F3B287B107F00561799 /* VideoDetailsOverlay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoDetailsOverlay.swift; sourceTree = "<group>"; }; 37E80F3B287B107F00561799 /* VideoDetailsOverlay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoDetailsOverlay.swift; sourceTree = "<group>"; };
37E80F3F287B472300561799 /* ScrollContentBackground+Backport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ScrollContentBackground+Backport.swift"; sourceTree = "<group>"; }; 37E80F3F287B472300561799 /* ScrollContentBackground+Backport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ScrollContentBackground+Backport.swift"; sourceTree = "<group>"; };
37E868FD29AA400B003128D0 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = "<group>"; };
37E868FE29AA402D003128D0 /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/Localizable.strings; sourceTree = "<group>"; };
37E868FF29AA407B003128D0 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = "<group>"; };
37E8B0EB27B326C00024006F /* TimelineView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TimelineView.swift; sourceTree = "<group>"; }; 37E8B0EB27B326C00024006F /* TimelineView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TimelineView.swift; sourceTree = "<group>"; };
37E8B0EF27B326F30024006F /* Comparable+Clamped.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Comparable+Clamped.swift"; sourceTree = "<group>"; }; 37E8B0EF27B326F30024006F /* Comparable+Clamped.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Comparable+Clamped.swift"; sourceTree = "<group>"; };
37EAD86A267B9C5600D9E01B /* SponsorBlockAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SponsorBlockAPI.swift; sourceTree = "<group>"; }; 37EAD86A267B9C5600D9E01B /* SponsorBlockAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SponsorBlockAPI.swift; sourceTree = "<group>"; };
@@ -1869,6 +1876,7 @@
372CFD14285F2E2A00B0B54B /* ControlsBar.swift */, 372CFD14285F2E2A00B0B54B /* ControlsBar.swift */,
3748186D26A769D60084E870 /* DetailBadge.swift */, 3748186D26A769D60084E870 /* DetailBadge.swift */,
37599F37272B4D740087F250 /* FavoriteButton.swift */, 37599F37272B4D740087F250 /* FavoriteButton.swift */,
379EF9DF29AA585F009FE6C6 /* HideShortsButtons.swift */,
37152EE926EFEB95004FB96D /* LazyView.swift */, 37152EE926EFEB95004FB96D /* LazyView.swift */,
371CC7732946963000979C1A /* ListingStyleButtons.swift */, 371CC7732946963000979C1A /* ListingStyleButtons.swift */,
37030FF627B0347C00ECDDAA /* MPVPlayerView.swift */, 37030FF627B0347C00ECDDAA /* MPVPlayerView.swift */,
@@ -2810,6 +2818,9 @@
cs, cs,
"zh-Hans", "zh-Hans",
ca, ca,
ar,
pt,
"pt-BR",
); );
mainGroup = 37D4B0BC2671614700C925CA; mainGroup = 37D4B0BC2671614700C925CA;
packageReferences = ( packageReferences = (
@@ -3300,6 +3311,7 @@
37BE0BCF26A0E2D50092E2DB /* VideoPlayerView.swift in Sources */, 37BE0BCF26A0E2D50092E2DB /* VideoPlayerView.swift in Sources */,
377692562946476F0055EC18 /* ChannelPlaylistsCacheModel.swift in Sources */, 377692562946476F0055EC18 /* ChannelPlaylistsCacheModel.swift in Sources */,
3769C02E2779F18600DDB3EA /* PlaceholderProgressView.swift in Sources */, 3769C02E2779F18600DDB3EA /* PlaceholderProgressView.swift in Sources */,
379EF9E029AA585F009FE6C6 /* HideShortsButtons.swift in Sources */,
37F5E8B6291BE9D0006C15F5 /* URLBookmarkModel.swift in Sources */, 37F5E8B6291BE9D0006C15F5 /* URLBookmarkModel.swift in Sources */,
37579D5D27864F5F00FD0B98 /* Help.swift in Sources */, 37579D5D27864F5F00FD0B98 /* Help.swift in Sources */,
37030FFB27B0398000ECDDAA /* MPVClient.swift in Sources */, 37030FFB27B0398000ECDDAA /* MPVClient.swift in Sources */,
@@ -3428,6 +3440,7 @@
372CFD16285F2E2A00B0B54B /* ControlsBar.swift in Sources */, 372CFD16285F2E2A00B0B54B /* ControlsBar.swift in Sources */,
37FFC441272734C3009FFD26 /* Throttle.swift in Sources */, 37FFC441272734C3009FFD26 /* Throttle.swift in Sources */,
37169AA72729E2CC0011DE61 /* AccountsBridge.swift in Sources */, 37169AA72729E2CC0011DE61 /* AccountsBridge.swift in Sources */,
379EF9E129AA585F009FE6C6 /* HideShortsButtons.swift in Sources */,
37BA793C26DB8EE4002A0235 /* PlaylistVideosView.swift in Sources */, 37BA793C26DB8EE4002A0235 /* PlaylistVideosView.swift in Sources */,
378E510026FE8EEE00F49626 /* AccountViewButton.swift in Sources */, 378E510026FE8EEE00F49626 /* AccountViewButton.swift in Sources */,
370F4FA927CC163A001B35DC /* PlayerBackend.swift in Sources */, 370F4FA927CC163A001B35DC /* PlayerBackend.swift in Sources */,
@@ -3842,6 +3855,7 @@
373CFACD26966264003CB2C6 /* SearchQuery.swift in Sources */, 373CFACD26966264003CB2C6 /* SearchQuery.swift in Sources */,
37C3A24B27235FAA0087A57A /* ChannelPlaylistCell.swift in Sources */, 37C3A24B27235FAA0087A57A /* ChannelPlaylistCell.swift in Sources */,
37F4AD2128612DFD004D0F66 /* Buffering.swift in Sources */, 37F4AD2128612DFD004D0F66 /* Buffering.swift in Sources */,
379EF9E229AA585F009FE6C6 /* HideShortsButtons.swift in Sources */,
37FD43E52704847C0073EE42 /* View+Fixtures.swift in Sources */, 37FD43E52704847C0073EE42 /* View+Fixtures.swift in Sources */,
37FAE000272ED58000330459 /* EditFavorites.swift in Sources */, 37FAE000272ED58000330459 /* EditFavorites.swift in Sources */,
37F961A127BD90BB00058149 /* PlayerBackendType.swift in Sources */, 37F961A127BD90BB00058149 /* PlayerBackendType.swift in Sources */,
@@ -3946,6 +3960,9 @@
370D5E4F292423F400D053A6 /* cs */, 370D5E4F292423F400D053A6 /* cs */,
3744F85C293CC9B800B09AB9 /* zh-Hans */, 3744F85C293CC9B800B09AB9 /* zh-Hans */,
37FFCA1029523283005EC13C /* ca */, 37FFCA1029523283005EC13C /* ca */,
37E868FD29AA400B003128D0 /* ar */,
37E868FE29AA402D003128D0 /* pt */,
37E868FF29AA407B003128D0 /* pt-BR */,
); );
name = Localizable.strings; name = Localizable.strings;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -3959,11 +3976,8 @@
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CODE_SIGN_ENTITLEMENTS = "Open in Yattee/Open in Yattee.entitlements"; CODE_SIGN_ENTITLEMENTS = "Open in Yattee/Open in Yattee.entitlements";
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic;
CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 137;
CURRENT_PROJECT_VERSION = 136;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 78Z5H3M6RJ;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Open in Yattee/Info.plist"; INFOPLIST_FILE = "Open in Yattee/Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = "Open in Yattee"; INFOPLIST_KEY_CFBundleDisplayName = "Open in Yattee";
@@ -3978,7 +3992,6 @@
PRODUCT_BUNDLE_IDENTIFIER = "stream.yattee.app.Open-in-Yattee"; PRODUCT_BUNDLE_IDENTIFIER = "stream.yattee.app.Open-in-Yattee";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match Development stream.yattee.app.Open-in-Yattee";
SDKROOT = iphoneos; SDKROOT = iphoneos;
SKIP_INSTALL = YES; SKIP_INSTALL = YES;
SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_EMIT_LOC_STRINGS = YES;
@@ -3995,8 +4008,7 @@
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual; CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 136; CURRENT_PROJECT_VERSION = 137;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 78Z5H3M6RJ; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 78Z5H3M6RJ;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Open in Yattee/Info.plist"; INFOPLIST_FILE = "Open in Yattee/Info.plist";
@@ -4027,7 +4039,7 @@
buildSettings = { buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 136; CURRENT_PROJECT_VERSION = 137;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 14.0; IPHONEOS_DEPLOYMENT_TARGET = 14.0;
MACOSX_DEPLOYMENT_TARGET = 11.0; MACOSX_DEPLOYMENT_TARGET = 11.0;
@@ -4047,7 +4059,7 @@
buildSettings = { buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 136; CURRENT_PROJECT_VERSION = 137;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 14.0; IPHONEOS_DEPLOYMENT_TARGET = 14.0;
MACOSX_DEPLOYMENT_TARGET = 11.0; MACOSX_DEPLOYMENT_TARGET = 11.0;
@@ -4206,11 +4218,8 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++14"; CLANG_CXX_LANGUAGE_STANDARD = "c++14";
CODE_SIGN_ENTITLEMENTS = "iOS/Yattee (iOS).entitlements"; CODE_SIGN_ENTITLEMENTS = "iOS/Yattee (iOS).entitlements";
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic;
CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 137;
CURRENT_PROJECT_VERSION = 136;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 78Z5H3M6RJ;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
GCC_PREPROCESSOR_DEFINITIONS = ( GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1", "DEBUG=1",
@@ -4242,7 +4251,6 @@
PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app; PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app;
PRODUCT_NAME = Yattee; PRODUCT_NAME = Yattee;
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match Development stream.yattee.app";
SDKROOT = iphoneos; SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO; SUPPORTS_MACCATALYST = NO;
@@ -4264,8 +4272,7 @@
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual; CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 136; CURRENT_PROJECT_VERSION = 137;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 78Z5H3M6RJ; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 78Z5H3M6RJ;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
GCC_PREPROCESSOR_DEFINITIONS = "GLES_SILENCE_DEPRECATION=1"; GCC_PREPROCESSOR_DEFINITIONS = "GLES_SILENCE_DEPRECATION=1";
@@ -4315,13 +4322,10 @@
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES;
CODE_SIGN_ENTITLEMENTS = Shared/Yattee.entitlements; CODE_SIGN_ENTITLEMENTS = Shared/Yattee.entitlements;
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application"; CODE_SIGN_STYLE = Automatic;
CODE_SIGN_STYLE = Manual;
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 136; CURRENT_PROJECT_VERSION = 137;
DEAD_CODE_STRIPPING = YES; DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=macosx*]" = 78Z5H3M6RJ;
ENABLE_APP_SANDBOX = YES; ENABLE_APP_SANDBOX = YES;
ENABLE_HARDENED_RUNTIME = YES; ENABLE_HARDENED_RUNTIME = YES;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
@@ -4344,7 +4348,6 @@
PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app; PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app;
PRODUCT_NAME = Yattee; PRODUCT_NAME = Yattee;
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
"PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = "match AppStore stream.yattee.app macos";
SDKROOT = macosx; SDKROOT = macosx;
SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OBJC_BRIDGING_HEADER = macOS/BridgingHeader.h; SWIFT_OBJC_BRIDGING_HEADER = macOS/BridgingHeader.h;
@@ -4363,9 +4366,8 @@
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application"; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application";
CODE_SIGN_STYLE = Manual; CODE_SIGN_STYLE = Manual;
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 136; CURRENT_PROJECT_VERSION = 137;
DEAD_CODE_STRIPPING = YES; DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=macosx*]" = 78Z5H3M6RJ; "DEVELOPMENT_TEAM[sdk=macosx*]" = 78Z5H3M6RJ;
ENABLE_APP_SANDBOX = YES; ENABLE_APP_SANDBOX = YES;
ENABLE_HARDENED_RUNTIME = YES; ENABLE_HARDENED_RUNTIME = YES;
@@ -4402,7 +4404,7 @@
buildSettings = { buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 136; CURRENT_PROJECT_VERSION = 137;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0; IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
@@ -4426,7 +4428,7 @@
buildSettings = { buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 136; CURRENT_PROJECT_VERSION = 137;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0; IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
@@ -4452,7 +4454,7 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 136; CURRENT_PROJECT_VERSION = 137;
DEAD_CODE_STRIPPING = YES; DEAD_CODE_STRIPPING = YES;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
@@ -4477,7 +4479,7 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 136; CURRENT_PROJECT_VERSION = 137;
DEAD_CODE_STRIPPING = YES; DEAD_CODE_STRIPPING = YES;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
@@ -4501,12 +4503,10 @@
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "iPhone Developer"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Manual; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 136; CURRENT_PROJECT_VERSION = 137;
DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=appletvos*]" = 78Z5H3M6RJ;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = tvOS/Info.plist; INFOPLIST_FILE = tvOS/Info.plist;
@@ -4529,7 +4529,6 @@
PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app; PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app;
PRODUCT_NAME = Yattee; PRODUCT_NAME = Yattee;
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
"PROVISIONING_PROFILE_SPECIFIER[sdk=appletvos*]" = "match Development stream.yattee.app tvos";
SDKROOT = appletvos; SDKROOT = appletvos;
SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OBJC_BRIDGING_HEADER = tvOS/BridgingHeader.h; SWIFT_OBJC_BRIDGING_HEADER = tvOS/BridgingHeader.h;
@@ -4546,9 +4545,8 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual; CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 136; CURRENT_PROJECT_VERSION = 137;
DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=appletvos*]" = 78Z5H3M6RJ; "DEVELOPMENT_TEAM[sdk=appletvos*]" = 78Z5H3M6RJ;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
@@ -4588,7 +4586,7 @@
buildSettings = { buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 136; CURRENT_PROJECT_VERSION = 137;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
@@ -4612,7 +4610,7 @@
buildSettings = { buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 136; CURRENT_PROJECT_VERSION = 137;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",

View File

@@ -96,7 +96,7 @@
"location" : "https://github.com/SDWebImage/SDWebImage", "location" : "https://github.com/SDWebImage/SDWebImage",
"state" : { "state" : {
"branch" : "master", "branch" : "master",
"revision" : "554e05a4415fe20add53531c21e593c403685c3d" "revision" : "a812079ae91a7f2e627364c42ea7b98abfa366ed"
} }
}, },
{ {

View File

@@ -1,17 +1,19 @@
CERTIFICATES_GIT_URL="git@github.com:developer/yattee-certificates.git" APP_NAME = "Yattee"
CERTIFICATES_GIT_URL = "git@github.com:developer/yattee-certificates.git"
GIT_AUTHORIZATION = "" # For certificates repo, https://github.com/settings/tokens/new (repo scope) GIT_AUTHORIZATION = "" # For certificates repo, https://github.com/settings/tokens/new (repo scope)
FASTLANE_USER="developer@mail.com" # Apple ID FASTLANE_USER = "developer@mail.com" # Apple ID
FASTLANE_PASSWORD="" # Apple ID Password FASTLANE_PASSWORD = "" # Apple ID Password
ITC_TEAM_ID="" # https://sarunw.com/posts/fastlane-find-team-id/ ITC_TEAM_ID = "" # https://sarunw.com/posts/fastlane-find-team-id/
TEAM_ID="" # Developer ID TEAM_ID = "" # Developer ID
DEVELOPER_NAME="" # Developer Name (Developer ID) DEVELOPER_NAME = "" # Developer Name (Developer ID)
# Developer Key # Developer Key
DEVELOPER_KEY_ID="" DEVELOPER_KEY_ID = ""
DEVELOPER_KEY_ISSUER_ID="" DEVELOPER_KEY_ISSUER_ID = ""
DEVELOPER_KEY_CONTENT="" DEVELOPER_KEY_CONTENT = ""
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD="" # Not needed for most users FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD = "" # Not needed for most users
TEMP_KEYCHAIN_USER = "keychain-user" TEMP_KEYCHAIN_USER = "keychain-user"
TEMP_KEYCHAIN_PASSWORD = "keychain-password" TEMP_KEYCHAIN_PASSWORD = "keychain-password"
DEVELOPER_APP_IDENTIFIER = "stream.yattee.app" DEVELOPER_APP_IDENTIFIER = "stream.yattee.app"

View File

@@ -13,6 +13,7 @@
# Uncomment the line if you want fastlane to automatically update itself # Uncomment the line if you want fastlane to automatically update itself
# update_fastlane # update_fastlane
APP_NAME = ENV['APP_NAME']
DEVELOPER_KEY_ID = ENV['DEVELOPER_KEY_ID'] DEVELOPER_KEY_ID = ENV['DEVELOPER_KEY_ID']
DEVELOPER_KEY_ISSUER_ID = ENV['DEVELOPER_KEY_ISSUER_ID'] DEVELOPER_KEY_ISSUER_ID = ENV['DEVELOPER_KEY_ISSUER_ID']
DEVELOPER_KEY_CONTENT = ENV['DEVELOPER_KEY_CONTENT'] DEVELOPER_KEY_CONTENT = ENV['DEVELOPER_KEY_CONTENT']
@@ -23,6 +24,11 @@ DEVELOPER_APP_IDENTIFIER = ENV['DEVELOPER_APP_IDENTIFIER']
GIT_AUTHORIZATION = ENV['GIT_AUTHORIZATION'] GIT_AUTHORIZATION = ENV['GIT_AUTHORIZATION']
TESTFLIGHT_EXTERNAL_GROUPS = ENV['TESTFLIGHT_EXTERNAL_GROUPS'] TESTFLIGHT_EXTERNAL_GROUPS = ENV['TESTFLIGHT_EXTERNAL_GROUPS']
AS_CONNECT_BUILD_VERSION_FILENAME = 'AS_CONNECT_BUILD_VERSION'
AS_CONNECT_BUILD_VERSION_PATH = "../#{AS_CONNECT_BUILD_VERSION_FILENAME}"
XCODEPROJ = "#{APP_NAME}.xcodeproj"
def delete_temp_keychain(name) def delete_temp_keychain(name)
delete_keychain( delete_keychain(
name: name name: name
@@ -51,17 +57,38 @@ end
desc "Bump build number and commit" desc "Bump build number and commit"
lane :bump_build do lane :bump_build do
increment_build_number as_connect_build_version = File.read(AS_CONNECT_BUILD_VERSION_PATH).to_i
commit_version_bump( build = get_build_number(xcodeproj: XCODEPROJ).to_i
message: "Bump build number to #{get_build_number}"
) puts "AS Connect build version: #{as_connect_build_version}"
puts "Current build number: #{build}"
if build <= as_connect_build_version
new_build_number = as_connect_build_version + 1
increment_build_number
actual_build_number = get_build_number(xcodeproj: XCODEPROJ).to_i
puts "Bumped build number to #{actual_build_number}"
File.open(AS_CONNECT_BUILD_VERSION_PATH, 'w+') { |file| file.write("#{new_build_number}\n") }
commit_version_bump(
message: "Bump build number to #{get_build_number(xcodeproj: XCODEPROJ)}",
include: [AS_CONNECT_BUILD_VERSION_FILENAME],
xcodeproj: XCODEPROJ
)
else
puts "Current build number is higher than App Store Connect build version"
end
end end
desc "Bump version number and commit" desc "Bump version number and commit"
lane :bump_version do lane :bump_version do
increment_version_number increment_version_number
commit_version_bump( commit_version_bump(
message: "Bump version number to #{get_version_number}" message: "Bump version number to #{get_version_number}",
xcodeproj: XCODEPROJ
) )
end end
@@ -76,16 +103,16 @@ platform :ios do
key_content: DEVELOPER_KEY_CONTENT key_content: DEVELOPER_KEY_CONTENT
) )
build = get_build_number(xcodeproj: "Yattee.xcodeproj") build = get_build_number(xcodeproj: XCODEPROJ)
version = get_version_number( version = get_version_number(
xcodeproj: "Yattee.xcodeproj", xcodeproj: XCODEPROJ,
target: "Yattee (iOS)" target: "#{APP_NAME} (iOS)"
) )
match( match(
type: 'appstore', type: 'appstore',
platform: 'ios', platform: 'ios',
app_identifier: ["#{DEVELOPER_APP_IDENTIFIER}", "#{DEVELOPER_APP_IDENTIFIER}.Open-in-Yattee"], app_identifier: ["#{DEVELOPER_APP_IDENTIFIER}", "#{DEVELOPER_APP_IDENTIFIER}.Open-in-#{APP_NAME}"],
git_basic_authorization: Base64.strict_encode64(GIT_AUTHORIZATION), git_basic_authorization: Base64.strict_encode64(GIT_AUTHORIZATION),
readonly: true, readonly: true,
keychain_name: TEMP_KEYCHAIN_USER, keychain_name: TEMP_KEYCHAIN_USER,
@@ -94,13 +121,13 @@ platform :ios do
) )
build_app( build_app(
scheme: "Yattee (iOS)", scheme: "#{APP_NAME} (iOS)",
output_directory: "fastlane/builds/#{version}-#{build}/iOS", output_directory: "fastlane/builds/#{version}-#{build}/iOS",
output_name: "Yattee-#{version}-iOS.ipa", output_name: "#{APP_NAME}-#{version}-iOS.ipa",
export_options: { export_options: {
provisioningProfiles: { provisioningProfiles: {
"#{DEVELOPER_APP_IDENTIFIER}" => "match AppStore #{DEVELOPER_APP_IDENTIFIER}", "#{DEVELOPER_APP_IDENTIFIER}" => "match AppStore #{DEVELOPER_APP_IDENTIFIER}",
"#{DEVELOPER_APP_IDENTIFIER}.Open-in-Yattee" => "match AppStore #{DEVELOPER_APP_IDENTIFIER}.Open-in-Yattee" "#{DEVELOPER_APP_IDENTIFIER}.Open-in-#{APP_NAME}" => "match AppStore #{DEVELOPER_APP_IDENTIFIER}.Open-in-#{APP_NAME}"
} }
} }
) )
@@ -128,10 +155,10 @@ platform :tvos do
key_content: DEVELOPER_KEY_CONTENT key_content: DEVELOPER_KEY_CONTENT
) )
build = get_build_number(xcodeproj: "Yattee.xcodeproj") build = get_build_number(xcodeproj: XCODEPROJ)
version = get_version_number( version = get_version_number(
xcodeproj: "Yattee.xcodeproj", xcodeproj: XCODEPROJ,
target: "Yattee (tvOS)" target: "#{APP_NAME} (tvOS)"
) )
match( match(
@@ -146,9 +173,9 @@ platform :tvos do
) )
build_app( build_app(
scheme: "Yattee (tvOS)", scheme: "#{APP_NAME} (tvOS)",
output_directory: "fastlane/builds/#{version}-#{build}/tvOS", output_directory: "fastlane/builds/#{version}-#{build}/tvOS",
output_name: "Yattee-#{version}-tvOS.ipa", output_name: "#{APP_NAME}-#{version}-tvOS.ipa",
export_method: "app-store", export_method: "app-store",
export_options: { export_options: {
provisioningProfiles: { provisioningProfiles: {
@@ -180,10 +207,10 @@ platform :mac do
key_content: DEVELOPER_KEY_CONTENT key_content: DEVELOPER_KEY_CONTENT
) )
build = get_build_number(xcodeproj: "Yattee.xcodeproj") build = get_build_number(xcodeproj: XCODEPROJ)
version = get_version_number( version = get_version_number(
xcodeproj: "Yattee.xcodeproj", xcodeproj: XCODEPROJ,
target: "Yattee (macOS)" target: "#{APP_NAME} (macOS)"
) )
match( match(
@@ -199,9 +226,9 @@ platform :mac do
) )
build_app( build_app(
scheme: "Yattee (macOS)", scheme: "#{APP_NAME} (macOS)",
output_directory: "fastlane/builds/#{version}-#{build}/macOS", output_directory: "fastlane/builds/#{version}-#{build}/macOS",
output_name: "Yattee-#{version}-macOS.app", output_name: "#{APP_NAME}-#{version}-macOS.app",
export_method: "app-store", export_method: "app-store",
export_options: { export_options: {
provisioningProfiles: { provisioningProfiles: {
@@ -231,10 +258,10 @@ platform :mac do
key_content: DEVELOPER_KEY_CONTENT key_content: DEVELOPER_KEY_CONTENT
) )
build = get_build_number(xcodeproj: "Yattee.xcodeproj") build = get_build_number(xcodeproj: XCODEPROJ)
version = get_version_number( version = get_version_number(
xcodeproj: "Yattee.xcodeproj", xcodeproj: XCODEPROJ,
target: "Yattee (macOS)" target: "#{APP_NAME} (macOS)"
) )
match( match(
@@ -249,9 +276,9 @@ platform :mac do
) )
build_mac_app( build_mac_app(
scheme: "Yattee (macOS)", scheme: "#{APP_NAME} (macOS)",
output_directory: "fastlane/builds/#{version}-#{build}/macOS", output_directory: "fastlane/builds/#{version}-#{build}/macOS",
output_name: "Yattee", output_name: "#{APP_NAME}",
export_method: "developer-id", export_method: "developer-id",
export_options: { export_options: {
provisioningProfiles: { provisioningProfiles: {
@@ -261,7 +288,7 @@ platform :mac do
) )
notarize( notarize(
package: "fastlane/builds/#{version}-#{build}/macOS/Yattee.app", package: "fastlane/builds/#{version}-#{build}/macOS/#{APP_NAME}.app",
bundle_id: "#{DEVELOPER_APP_IDENTIFIER}", bundle_id: "#{DEVELOPER_APP_IDENTIFIER}",
api_key: api_key, api_key: api_key,
) )