Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
d230051
Update release version to snapshot
Sep 25, 2025
262ae91
StateLayerEventPublisher related refactoring (#34)
testableapple Sep 26, 2025
41aca6d
Finalise StateLayerEventPublisher migration (#35)
laevandus Sep 26, 2025
75bfea2
Add FeedsClient unit tests (#36)
testableapple Sep 30, 2025
0d4a175
Use explicit set of rules in SwiftFormat and SwiftLint and bump versi…
laevandus Oct 2, 2025
71191ea
[CI] Support Xcode 26 (#38)
testableapple Oct 3, 2025
8530212
Bump Xcode version to 26.0.1 (#41)
testableapple Oct 6, 2025
1da9a8f
Adjust linter rules and linted paths (#42)
laevandus Oct 8, 2025
7dd624e
[CI] Implement detailed size metrics (#43)
testableapple Oct 13, 2025
593e58f
[CI] Bump fastlane plugin version to avoid PR comments when there are…
testableapple Oct 13, 2025
e3c7350
Updated events matching (#39)
laevandus Oct 13, 2025
402649a
[CI] Get the correct target branch on public interface validation (#40)
testableapple Oct 13, 2025
fc391d5
[CI] Add missing lane
testableapple Oct 15, 2025
af42504
DemoApp: Disabled landscape orientation
martinmitrevski Oct 20, 2025
c2b8c23
Integrate StreamCore restructure (#44)
laevandus Oct 22, 2025
7aa738e
Generated code from latest spec (#46)
martinmitrevski Nov 4, 2025
33e7d4b
Compatibility changes for StreamCore 0.5.0 (#45)
laevandus Nov 5, 2025
ed4948f
Resolve cron checks issue on CI (#48)
testableapple Nov 7, 2025
e8c8d4d
[CI] Bump xcsize plugin version (#49)
testableapple Nov 10, 2025
2ed8a70
Remove the unnecessary header file (#47)
laevandus Nov 12, 2025
ff79f8b
Feature: keep feed own capabilities up to date (#51)
laevandus Nov 14, 2025
2aadc83
Add activity batch update event for updating state with activity batc…
laevandus Nov 14, 2025
df79495
Update filtering keys and support location based filtering (#53)
laevandus Nov 18, 2025
64baf32
Bump StreamCore version (#54)
testableapple Nov 19, 2025
e7f407b
Bump 0.5.0
Nov 19, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion .github/workflows/cron-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ jobs:
strategy:
matrix:
include:
- ios: "26.0"
device: "iPhone 17 Pro"
setup_runtime: false
- ios: "18.5"
device: "iPhone 16 Pro"
setup_runtime: false
Expand All @@ -36,7 +39,7 @@ jobs:
fail-fast: false
runs-on: macos-15
env:
XCODE_VERSION: "16.4"
XCODE_VERSION: "26.0.1"
steps:
- uses: actions/checkout@v4.1.1
- uses: ./.github/actions/bootstrap
Expand Down Expand Up @@ -70,6 +73,8 @@ jobs:
strategy:
matrix:
include:
- xcode: 26.0.1 # swift 6.2
os: macos-15
- xcode: 16.4 # swift 6.1
os: macos-15
- xcode: 16.1 # swift 6.0
Expand Down
8 changes: 6 additions & 2 deletions .github/workflows/sdk-size-metrics.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ jobs:
runs-on: macos-15
env:
GITHUB_TOKEN: '${{ secrets.CI_BOT_GITHUB_TOKEN }}'
GITHUB_PR_NUM: ${{ github.event.pull_request.number }}
steps:
- name: Connect Bot
uses: webfactory/ssh-agent@v0.7.0
Expand All @@ -28,10 +29,13 @@ jobs:

- uses: ./.github/actions/bootstrap

- name: Run SDK Size Metrics
- name: Run General SDK Size Metrics
run: bundle exec fastlane show_frameworks_sizes
timeout-minutes: 30
env:
GITHUB_PR_NUM: ${{ github.event.pull_request.number }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
APPSTORE_API_KEY: ${{ secrets.APPSTORE_API_KEY }}

- name: Run Detailed SDK Size Metrics
run: bundle exec fastlane size_analyze
timeout-minutes: 30
2 changes: 1 addition & 1 deletion .github/workflows/smoke-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ concurrency:

env:
HOMEBREW_NO_INSTALL_CLEANUP: 1 # Disable cleanup for homebrew, we don't need it on CI
IOS_SIMULATOR_DEVICE: "iPhone 16 Pro (18.5)"
IOS_SIMULATOR_DEVICE: "iPhone 17 Pro (26.0)"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_PR_NUM: ${{ github.event.pull_request.number }}

Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ App Thinning Size Report.txt
app-thinning.plist
*.dmg
yeetd-normal.pkg
*LinkMap.txt

# Stream Video Buddy
video-buddy-server.log
Expand Down
74 changes: 60 additions & 14 deletions .swiftformat
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,65 @@
--header "\nCopyright © {year} Stream.io Inc. All rights reserved.\n"
--swiftversion 6.0

--ifdef no-indent
--disable redundantType
--disable extensionAccessControl
--disable andOperator
--disable hoistPatternLet
--disable typeSugar
--disable opaqueGenericParameters
--disable genericExtensions
--disable preferForLoop
--disable redundantGet # it removes get async throws from getters
--rules blankLinesAroundMark
--rules blankLinesAtEndOfScope
--rules blankLinesAtStartOfScope
--rules blankLinesBetweenScopes
--rules braces
--rules consecutiveBlankLines
--rules consecutiveSpaces
--rules duplicateImports
--rules elseOnSameLine
--rules emptyBraces
--rules enumNamespaces
--rules fileHeader
--rules indent
--rules initCoderUnavailable
--rules isEmpty
--rules leadingDelimiters
--rules linebreakAtEndOfFile
--rules linebreaks
--rules modifierOrder
--rules numberFormatting
--rules redundantBackticks
--rules redundantBreak
--rules redundantExtensionACL
--rules redundantFileprivate
--rules redundantLet
--rules redundantLetError
--rules redundantNilInit
--rules redundantObjc
--rules redundantPattern
--rules redundantRawValues
--rules redundantVoidReturnType
--rules semicolons
--rules sortImports
--rules spaceAroundBraces
--rules spaceAroundBrackets
--rules spaceAroundComments
--rules spaceAroundGenerics
--rules spaceAroundOperators
--rules spaceAroundParens
--rules spaceInsideBraces
--rules spaceInsideBrackets
--rules spaceInsideComments
--rules spaceInsideGenerics
--rules spaceInsideParens
--rules strongOutlets
--rules strongifiedSelf
--rules todos
--rules trailingCommas
--rules trailingSpace
--rules unusedArguments
--rules void
--rules wrap
--rules wrapArguments
--rules wrapAttributes
--rules yodaConditions

# Rules inferred from Swift Standard Library:
--disable anyObjectProtocol, wrapMultilineStatementBraces
# Configuration for enabled rules
--ifdef no-indent
--indent 4
--enable isEmpty
--disable redundantParens # it generates mistakes for e.g. "if (a || b), let x = ... {}"
--semicolons inline
--nospaceoperators ..., ..< # what about ==, +=?
--commas inline
Expand All @@ -35,3 +78,6 @@
--wraparguments before-first
--wrapparameters before-first
--wrapcollections before-first

# Exclude paths
--exclude Sources/StreamFeeds/Generated,Sources/StreamFeeds/generated,vendor/bundle,Pods,spm_cache,derived_data,.build
16 changes: 7 additions & 9 deletions .swiftlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,12 @@ excluded:
- .ruby-lsp
- .swiftpm
- derived_data
- fastlane
- Package.swift
- Scripts
- Sources/StreamFeeds/Generated
- Sources/StreamFeeds/generated
- spm_cache
- vendor
- vendor/bundle

only_rules:
# Currently enabled autocorrectable rules
- attribute_name_spacing
- closing_brace
- colon
Expand All @@ -26,14 +21,15 @@ only_rules:
- empty_enum_arguments
- empty_parameters
- empty_parentheses_with_trailing_closure
- explicit_init
- file_name_no_space
- joined_default_parameter
- leading_whitespace
- legacy_cggeometry_functions
- legacy_constant
- legacy_constructor
- legacy_nsgeometry_functions
- mark
- multiline_arguments
- no_space_in_method_call
- prefer_type_checking
- private_over_fileprivate
Expand All @@ -50,7 +46,6 @@ only_rules:
- trailing_comma
- trailing_newline
- trailing_semicolon
- trailing_whitespace
- unneeded_break_in_switch
- unneeded_override
- unused_closure_parameter
Expand All @@ -59,8 +54,11 @@ only_rules:
- vertical_whitespace
- void_return

trailing_whitespace:
ignores_empty_lines: true
multiline_arguments:
only_enforce_after_first_closure_on_first_line: true

file_name_no_space:
severity: error

custom_rules:
coredata_date_forbidden:
Expand Down
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,23 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).

### 🔄 Changed

# [0.5.0](https://github.com/GetStream/stream-feeds-swift/releases/tag/0.5.0)
_November 19, 2025_

### ✅ Added
- Update local state when using activity batch operations in `FeedsClient` [#52](https://github.com/GetStream/stream-feeds-swift/pull/52)
- Keep `FeedData.ownCapabilities` up to date in every model when handling web-socket events [#51](https://github.com/GetStream/stream-feeds-swift/pull/51)
- Add filtering and sorting keys: [#53](https://github.com/GetStream/stream-feeds-swift/pull/53)
- `ActivitiesFilterField.feeds`
- `ActivitiesFilterField.interestTags`
- `ActivitiesFilterField.near`
- `ActivitiesFilterField.withinBounds`
- `ModerationConfigsSortField.team`
### 🐞 Fixed
- Fix remote key for `ModerationConfigsSortField.key` [#53](https://github.com/GetStream/stream-feeds-swift/pull/53)
### 🔄 Changed
- Rename `ActivitiesFilterField.type` to `ActivitiesFilterField.activityType` [#53](https://github.com/GetStream/stream-feeds-swift/pull/53)

# [0.4.0](https://github.com/GetStream/stream-feeds-swift/releases/tag/0.4.0)
_September 25, 2025_

Expand Down
45 changes: 25 additions & 20 deletions DemoApp/FeedsView/FeedsListView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -149,29 +149,34 @@ struct FeedsListView: View {
}
.disabled(updatedActivityText.trimmed.isEmpty)
}
.alert("Delete Activity", isPresented: .init(
get: { activityToDelete != nil },
set: { if !$0 { activityToDelete = nil } }
), actions: {
Button("Cancel", role: .cancel) {
activityToDelete = nil
}
Button("Delete", role: .destructive) {
if let activity = activityToDelete {
Task {
do {
_ = try await feed.deleteActivity(id: activity.id)
activityToDelete = nil
} catch {
log.error("Error deleting an activity \(error)")
bannerError = error
.alert(
"Delete Activity",
isPresented: .init(
get: { activityToDelete != nil },
set: { if !$0 { activityToDelete = nil } }
),
actions: {
Button("Cancel", role: .cancel) {
activityToDelete = nil
}
Button("Delete", role: .destructive) {
if let activity = activityToDelete {
Task {
do {
_ = try await feed.deleteActivity(id: activity.id)
activityToDelete = nil
} catch {
log.error("Error deleting an activity \(error)")
bannerError = error
}
}
}
}
},
message: {
Text("Are you sure you want to delete this activity?")
}
}, message: {
Text("Are you sure you want to delete this activity?")
})
)
}

func refresh() async {
Expand Down Expand Up @@ -206,7 +211,7 @@ struct ActivityView: View {
@State var selectedAttachment: Attachment?

let user: UserData
let ownCapabilities: [FeedOwnCapability]
let ownCapabilities: Set<FeedOwnCapability>
let text: String
var attachments: [Attachment]?
var activity: ActivityData
Expand Down
3 changes: 0 additions & 3 deletions DemoApp/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,7 @@
</dict>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
</array>
</dict>
</plist>
9 changes: 7 additions & 2 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -206,9 +206,11 @@ GEM
bundler
fastlane
pry
fastlane-plugin-stream_actions (0.3.90)
fastlane-plugin-stream_actions (0.3.101)
xctest_list (= 1.2.1)
fastlane-plugin-versioning (0.7.1)
fastlane-plugin-xcsize (1.2.0)
xcsize (= 1.2.0)
fastlane-sirp (1.0.0)
sysrandom (~> 1.0)
ffi (1.17.2)
Expand Down Expand Up @@ -388,6 +390,8 @@ GEM
rouge (~> 3.28.0)
xcpretty-travis-formatter (1.0.1)
xcpretty (~> 0.2, >= 0.0.7)
xcsize (1.2.0)
commander (>= 4.6, < 6.0)
xctest_list (1.2.1)

PLATFORMS
Expand All @@ -399,8 +403,9 @@ DEPENDENCIES
danger-commit_lint
fastlane
fastlane-plugin-lizard
fastlane-plugin-stream_actions (= 0.3.90)
fastlane-plugin-stream_actions (= 0.3.101)
fastlane-plugin-versioning
fastlane-plugin-xcsize (= 1.2.0)
json
lefthook
plist
Expand Down
3 changes: 1 addition & 2 deletions Githubfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@
export ALLURECTL_VERSION='2.16.0'
export XCRESULTS_VERSION='1.19.1'
export YEETD_VERSION='1.0'
export MINT_VERSION='0.17.5'
export SONAR_VERSION='6.2.1.4610'
export IPSW_VERSION='3.1.592'
export INTERFACE_ANALYZER_VERSION='1.0.7'
export SWIFT_LINT_VERSION='0.59.1'
export SWIFT_FORMAT_VERSION='0.56.4'
export SWIFT_FORMAT_VERSION='0.58.2'
export SWIFT_GEN_VERSION='6.5.1'
6 changes: 4 additions & 2 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,15 @@ let package = Package(
)
],
dependencies: [
.package(url: "https://github.com/GetStream/stream-core-swift.git", exact: "0.1.0")
.package(url: "https://github.com/GetStream/stream-core-swift.git", exact: "0.6.0")
],
targets: [
.target(
name: "StreamFeeds",
dependencies: [
.product(name: "StreamCore", package: "stream-core-swift")
.product(name: "StreamAttachments", package: "stream-core-swift"),
.product(name: "StreamCore", package: "stream-core-swift"),
.product(name: "StreamOpenAPI", package: "stream-core-swift")
]
),
.testTarget(
Expand Down
Loading
Loading