Skip to content

[CI] Convert Xcode groups to buildable folders#3940

Merged
testableapple merged 7 commits intodevelopfrom
ci/buildable-folders
Jan 28, 2026
Merged

[CI] Convert Xcode groups to buildable folders#3940
testableapple merged 7 commits intodevelopfrom
ci/buildable-folders

Conversation

@testableapple
Copy link
Copy Markdown
Contributor

@testableapple testableapple commented Jan 27, 2026

🔗 Issue Links

Resolve https://linear.app/stream/issue/IOS-1353

🎯 Goal

Convert Xcode groups to buildable folders

📝 Notes

The remaining 2 groups (Products, Frameworks) are standard Xcode system groups that cannot and should not be converted.

🎨 Showcase

Before After
Screenshot 2026-01-27 at 4 47 13 PM Screenshot 2026-01-27 at 4 46 22 PM

🧪 Manual Testing Notes

Open project in Xcode, build some targets.

Summary by CodeRabbit

  • Refactor
    • Removed an internal test diffing/assertion utility; no change to app behavior or user-facing features.
  • Tests
    • Updated the UI test data model current version to align test assets with the latest model schema.
  • Chores
    • Minor build tooling script improvement to expose packaging log path during packaging.

✏️ Tip: You can customize this high-level summary in your review settings.

@testableapple testableapple requested a review from a team as a code owner January 27, 2026 16:48
@testableapple testableapple added the 🤖 CI/CD Any work related to CI/CD label Jan 27, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jan 27, 2026

📝 Walkthrough

Walkthrough

Removed a test utility providing diffing/XCTAssertEqual helpers, updated an Xcode data model current-version plist to reference the model, and applied a small Fastlane refactor to expose Packaging.log path and print its location.

Changes

Cohort / File(s) Change Summary
Test utilities removed
Tests/Shared/XCTAssertEqual+Difference.swift
Deleted entire file (≈387 lines). Removes CI-aware XCTAssertEqual wrapper, public Difference enum and IndentationType, diff and dumpDiff APIs, and all internal differ/formatting helpers.
Xcode model current version
StreamChatUITestsApp/StreamChatUITestsApp.xcdatamodeld/.xccurrentversion
Plist updated to set _XCCurrentVersionName to StreamChatUITestsApp.xcdatamodel (added version reference).
Fastlane packaging log
fastlane/Fastfile
Minor refactor: introduce packaging_log_path variable, print/export Packaging.log path, and read from packaging_log_path instead of inline path concatenation.

Sequence Diagram(s)

(omitted)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested reviewers

  • laevandus
  • nuno-vieira

Poem

🐰 I nibble at lines and hop with glee,
Gone the diff that once followed me,
Models point true, logs now unfold,
My whiskers twitch at changes bold,
🥕✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1
❌ Failed checks (1 inconclusive)
Check name Status Explanation Resolution
Out of Scope Changes check ❓ Inconclusive The deletion of the comprehensive test-utility module XCTAssertEqual+Difference.swift appears unrelated to the Xcode buildable folders migration; clarification is needed on whether this removal is intentional or a separate refactoring. Confirm whether the removal of XCTAssertEqual+Difference.swift is part of the buildable folders migration or a separate change that should be addressed independently.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title '[CI] Convert Xcode groups to buildable folders' directly and specifically describes the main change: converting Xcode project groups to buildable folders for CI purposes.
Linked Issues check ✅ Passed The PR successfully addresses IOS-1353 by converting Xcode groups to buildable folders bottom-up and maintaining fastlane functionality, as evidenced by the refactored Fastfile and successful XCSize reports.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

Warning

Review ran into problems

🔥 Problems

Errors were encountered while retrieving linked issues.

Errors (1)
  • B9CEB353-7777: Entity not found: Issue - Could not find referenced Issue.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@testableapple testableapple marked this pull request as draft January 27, 2026 17:05
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jan 27, 2026

1 Warning
⚠️ Big PR

Generated by 🚫 Danger

@testableapple testableapple marked this pull request as ready for review January 28, 2026 15:49
@Stream-SDK-Bot
Copy link
Copy Markdown
Collaborator

SDK Size

title develop branch diff status
StreamChat 8.63 MB 8.6 MB -34 KB 🚀
StreamChatUI 4.91 MB 4.91 MB +1 KB 🟢

@Stream-SDK-Bot
Copy link
Copy Markdown
Collaborator

StreamChat XCSize

Object Diff (bytes)
Chat.o -218907
ChannelController.o +165815
MessageReactionDTO.o -108361
ManualEventHandler.o +107616
MessageEditor.o -80301
Show 258 more objects
Object Diff (bytes)
MessageSender.o +74890
ChannelListPayload.o +72958
ReminderPayloads.o -60938
AttachmentDownloader.o +58568
MessagePayloads.o -50689
MessageDTO.o -35150
UserController.o -33551
UserListController.o +32927
MessageSearchQuery.o -31560
RawJSON.o +23675
MemberController.o +20866
ThreadDTO.o +19954
APIClient.o +19243
ChatMessageAttachment.o -18572
RequestEncoder.o -17801
EventsController.o -13192
ChatRemoteNotificationHandler.o +12575
PollVoteDTO.o +12098
ChatMessageVideoAttachment.o -11977
AudioAnalysisEngine.o +11282
ChannelRepository.o -10558
ChannelListUpdater.o +9787
MessageUpdater.o -8970
PollVoteListController+SwiftUI.o -8006
CurrentUserController.o +7765
CDNClient.o +7180
LivestreamChannelController.o +7143
OfflineRequestsRepository.o -6961
ChannelUpdater.o -6622
ChannelWatcherHandler.o +6392
SyncRepository.o +6309
ChatMessage.o +5449
UserSearchState.o +3651
UserDTO.o -3465
MessagePayload+asModel.o +3460
SharedLocationDTO.o +3449
PollDTO.o -3408
ChatMessageAudioAttachment.o +3363
ReadStateHandler.o -2664
UserPayloads.o +2558
AppSettingsPayload.o +2528
AttachmentDTO.o +2359
ChannelDTO.o +2297
ChatChannelWatcherListController.o -2154
PollVoteListController+Combine.o -2138
DevicePayloads.o +2128
CurrentUser.o -1938
MessageController.o +1933
PollController+SwiftUI.o +1854
ThreadListPayload.o -1768
MemberListController.o +1742
ChannelMemberUpdater.o -1708
MulticastDelegate.o -1668
BlockedUserDetails.o -1600
FileUploadPayload.o -1540
ChannelController+SwiftUI.o +1498
MemberController+SwiftUI.o +1452
UserUpdater.o -1404
UserListUpdater.o -1390
ConnectedUserState+Observer.o +1343
AudioPlaying.o +1321
URLRequest+cURL.o -1320
User.o +1314
AppSettings.o -1288
Channel.o -1246
UserController+Combine.o -1234
ReactionListController+SwiftUI.o +1221
MemberController+Combine.o -1220
ReactionListController+Combine.o -1220
UserListController+Combine.o -1220
ConnectionController+SwiftUI.o +1196
ConnectionController+Combine.o -1183
MessageController+SwiftUI.o +1170
MessageController+Combine.o -1168
ChatClient.o -1132
EventsController+SwiftUI.o +1110
AttachmentTypes.o -1054
UserListQuery.o -1048
ChatMessageFileAttachment.o -1036
AuthenticationRepository.o +1003
WebSocketClient.o -999
UserController+SwiftUI.o +998
TypingEventsSender.o -992
PushDevice.o -960
LocationPayloads.o +960
DraftPayloads.o +942
MessageModerationDetailsPayload.o +900
PollController+Combine.o -890
MessageSearchController.o -876
ChannelEditDetailPayload.o +842
MessageRepository.o -841
MessageModerationDetails.o -835
UserListController+SwiftUI.o +815
SyncOperations.o +782
ChatMessageGiphyAttachment.o -752
ChannelMuteDTO.o -747
NotificationEvents.o -741
BlockedUserPayload.o +680
DraftMessagesRepository.o -670
ChannelDeliveredPayload.o +640
NSManagedObject+Extensions.o -633
Filter.o -616
UserList.o -587
Device.o -584
UserSearch.o +582
PinnedMessagesSortingKey.o -560
DeliveredMessageInfo.o -556
CurrentUserDTO.o +546
ReactionListState.o -518
ErrorPayload.o +514
ThreadEndpoints.o -504
IdentifiablePayload.o +502
CreatePollOptionRequestBody.o -496
MessageSearchController+Combine.o -490
AudioRecording.o -483
AttachmentUploader.o +478
ChatState.o +454
ChannelMemberUnbanRequestPayload.o +422
ChannelListController+Combine.o -420
AssetPropertyLoading.o -408
ChatChannelWatcherListController+SwiftUI.o +400
ChannelId.o +396
MessageReactionType.o -396
EventPayload.o -382
UserSearchController.o +358
PushPreferencePayloads.o +348
DatabaseContainer.o +341
ReactionList.o +332
AttachmentActionRequestBody.o +330
UploadedAttachment.o +328
Endpoint.o +324
ChannelListController.o +315
AudioPlayerObserving.o +307
ChannelReadDTO.o +306
CurrentUserPayloads.o +306
MemberEvents.o +304
MessageReactionGroupDTO.o -297
MessageReactionRequestPayload.o -296
SendMessageInterceptor.o +292
UserListPayload.o -288
CreatePollRequestBody.o +274
PushPreferenceLevel.o -266
ChannelController+Combine.o +266
PollController.o +265
URLSessionWebSocketEngine.o -263
MessageState.o -262
PollVoteListController.o +250
ChannelListQueryDTO.o +245
ChannelListLinker.o +239
MessageTranslationsPayload.o +232
CurrentUserUpdater.o +230
AudioRecordingState.o +228
AudioPlaybackContextAccessor.o +224
ChannelMemberListUpdater.o -222
ChannelConfigDTO.o +220
DatabaseSession.o -217
Thread.o -214
ChannelMemberListQueryDTO.o +212
SystemEnvironment+XStreamClient.o -210
MessageSearchState+Observer.o -206
MemberListState+Observer.o -205
ChannelList.o +202
ChatClient+Environment.o -194
StringInterpolation+Extensions.o +189
SystemEnvironment.o -189
UnknownChannelEvent.o +188
ConnectionRepository.o +186
MemberUpdatePayload.o +180
AudioPlaybackContext.o +178
FlagUserPayload.o +178
MessageAttachmentPayload.o +174
ChannelReadUpdaterMiddleware.o -174
ChannelPinningScope.o -172
ChannelArchivingScope.o +172
AnyAttachmentPayload.o +172
FlagMessagePayload.o +170
MarkUnreadPayload.o +170
UserChannelBanEventsMiddleware.o -169
ListChange.o -167
ChatClient+ReactionListController.o +163
Sequence+CompactMapLoggingError.o -161
PollOptionDTO.o -157
MemberPayload.o +156
DraftEvents.o -154
MultipartFormData.o -152
IdentifiableModel.o +150
MemberListState.o -149
ConnectionController.o +149
ChatClientFactory.o -146
ThreadListQuery.o -142
ActiveLiveLocationsEndTimeTracker.o +141
UserWatchingEventMiddleware.o +136
MemberModelDTO.o -136
MessageReminderListController.o +133
ReactionListQuery.o -132
PollsEvents.o -130
BackgroundDatabaseObserver.o +129
CastPollVoteRequestBody.o -128
UpdatePartialRequestBody.o +122
PollsPayloads.o +118
MessageReminderDTO.o +117
EventObserver.o -110
EventsController+Combine.o +108
PollOption.o +108
EventNotificationCenter.o -107
EventDecoder.o -105
ChannelQuery.o -104
StateLayerDatabaseObserver.o -103
MemberList.o +102
MessageState+Observer.o +100
ChannelListSortingKey.o -100
Codable+Extensions.o -99
UnreadCount.o +95
UserListState.o +94
MessageSearch.o -93
ChannelCodingKeys.o +92
MarkdownParser.o +92
TranslationLanguage.o -92
ChannelEvents.o +84
ThreadEvents.o -84
EventSender.o -84
MutedChannelPayload.o +84
InternetConnection.o -83
ConnectedUser.o +78
WebSocketConnectPayload.o -76
AttachmentId.o +76
StreamModelsTransformer.o -74
AudioRecordingContextAccessor.o -70
AudioRecordingContext.o -70
MemberEndpoints.o -68
UnreadMessageLookup.o -68
MessageDeliveryCriteriaValidator.o +68
CustomEventRequestBody.o +68
PushPreference.o -68
BaseURL.o +66
AudioSessionConfiguring.o -64
ThreadsRepository.o -64
ChannelMemberListPayload.o +64
ConnectionRecoveryHandler.o -62
AudioQueuePlayer.o -62
ThreadListController.o -62
ChatClient+ThreadListController.o +60
ReactionListState+Observer.o -60
AudioSessionProtocol.o -60
ScheduledStreamTimer.o -58
ConnectedUserState.o -58
DraftMessage.o -56
ChatClient+ChannelController.o +54
ChannelListState.o -52
BackgroundTaskScheduler.o -52
ChatClient+Factory.o +50
BackgroundEntityDatabaseObserver.o -48
Sorting.o +46
Dictionary+Extensions.o -46
ChannelMemberListQuery.o -44
ClientError.o +44
MessageReminderListQuery.o -42
AttachmentQueueUploader.o -42

@Stream-SDK-Bot
Copy link
Copy Markdown
Collaborator

StreamChatUI XCSize

Object Diff (bytes)
AttachmentsPreviewVC.o -102084
Appearance+Formatters.o +49860
ContainerStackView.o -36202
ChatMessageLayoutOptionsResolver.o +27367
SwipeToReplyGestureHandler.o +25976
Show 197 more objects
Object Diff (bytes)
ChatMessageListVC.o -21305
ChatChannelVC.o +17815
ChatChannelListEmptyView.o +17687
ChatChannelListItemView.o +16999
Appearance+SwiftUI.o -13118
Appearance.o +13108
ChatMessageGiphyView.o +8917
ChatSuggestionsVC.o -8746
PollAllOptionsListVC.o +8129
ChatChannelListCollectionViewDelegate.o +8126
PollResultsVC.o -8089
PollCreationVC.o +7412
ChatMessageActionsVC.o -5733
ChatMessageSearchVC.o -5437
ChatChannelHeaderView.o +5431
ChatMessageListView.o -5395
PollResultsSectionHeaderView.o -5341
ChatMessageContentView.o +5081
Algorithm.o -5052
PollCommentListItemCell.o +5000
PollResultsVoteItemCell.o -4953
Components.o +4580
PollAllOptionsListItemCell.o +4503
Components+SwiftUI.o -4444
MessageActionsTransitionController.o -3232
ChatMessageLayoutOptions.o +3068
ChatThreadListVC.o +3018
ChatChannelListVC.o +2844
ChatFileAttachmentListView+ItemView.o +2781
ChatChannelListLoadingViewCellContentView.o +2580
ChatMessageReactionsPickerVC.o -2282
Changeset.o +2176
FileAttachmentViewInjector.o +2130
StagedChangeset.o -2080
ChatMessageListRouter.o -1988
StreamModalTransitioningDelegate.o +1671
PollAttachmentViewInjector.o -1524
MarkdownFormatter.o +1389
ChatMessageLinkPreviewView.o +1334
ChatChannelListErrorView.o +1067
ComposerVC.o +1018
ChatMentionSuggestionCollectionViewCell.o -1004
FileAttachmentView.o +973
ChatThreadListItemView.o -970
VideoPlaybackControlView.o -908
ChatChannelAvatarView.o +842
PollCreationTextFieldView.o -758
ImageResponse.o -746
PollCreationNameCell.o +739
TitleContainerView.o +720
DefaultScrollViewKeyboardHandler.o -653
ChatThreadArrowView.o -645
ImageRequest.o +625
DataCache.o -610
ChatChannelListSearchVC.o +601
Task.o -574
UIView+Extensions.o -534
ComposerKeyboardHandler.o +525
ChatChannelListItemView+SwiftUI.o +508
ImageViewExtensions.o -506
ComposerView.o -498
ChatMessageVoiceRecordingAttachmentListView+ItemView.o +494
UITextView+Extensions.o -487
ChatMessageDecorationView.o +486
PollCreationFeatureCell.o +479
ImagePipeline.o +479
PollResultsVoteItemView.o +476
ChatChannelListCollectionViewCell.o +449
ChatMessageContentView+SwiftUI.o -445
ImageResultsMapper.o +444
ChatMessageDeliveryStatusView.o -425
TaskLoadData.o -422
ChatMessageReactionsView.o -412
UIImage+SwiftyGif.o -411
UploadingOverlayView.o -392
TaskFetchDecodedImage.o -381
AudioPlaybackRateFormatter.o +377
Appearance+ColorPalette.o -373
PollCommentListSectionHeaderView.o +368
ChatMessageReactionAuthorViewCell.o -363
AnyDifferentiable.o -355
ChatMessageImageGallery+ImagePreview.o +354
PollResultsTableHeaderView.o -352
NukeImageProcessor.o -347
PollAttachmentOptionListView.o +329
UploadingProgressFormatter.o -325
ChatMessageGalleryView.o +324
ImagePipelineConfiguration.o -324
Appearance+Images.o -320
ChatChannelListRouter.o +313
PollResultsVoteListVC.o +309
Appearance+Fonts.o +304
ChatMessageReactionAuthorsVC.o +298
VideoAttachmentComposerPreview.o -297
ChatMessageActionItem.o +295
PollCommentListVC.o +294
ChatMessageFileAttachmentListView.o -282
TaskFetchOriginalImageData.o +281
ImagePublisher.o +279
ChatThreadListRouter.o -242
ChatMessageAttachmentPreviewVC.o +241
Deprecations.o -238
CommandLabelView.o +232
ChatCommandSuggestionView.o -221
ChatChannelSearchVC.o +217
VoiceRecordingVC.o -216
PollCommentListSectionFooterView.o +215
ImageCache.o +202
PollResultsSectionFooterView.o -193
TaskFetchWithPublisher.o -177
ImageLoaderOptions.o -176
PollCreationFeatureSwitchView.o +176
ChatMessageReactionItemView.o +172
ChatUnreadMessagesCountDecorationView.o +172
BannerView.o -168
MessageTimestampFormatter.o -168
MessageDateSeparatorFormatter.o +168
SwipeableView.o -166
ImageDownloadOptions.o +166
NukeImageLoader.o -163
ImageDecoding.o +160
ChatThreadListEmptyView.o -159
ChatMessageActionControl.o -156
DifferenceKit+Stream.o -156
ImagePipelineCache.o -155
UnsupportedAttachmentViewInjector.o -154
VideoAttachmentGalleryCell.o -154
ChatLoadingIndicator.o -154
ChatSuggestionsHeaderView.o -153
NavigationRouter.o -151
ChatMessageInteractiveAttachmentView.o -148
JumpToUnreadMessagesButton.o +144
DataLoader.o -143
ChatMessageListScrollOverlayView.o +141
StackedUserAvatarsView.o -138
ChatMessageReactionsBubbleTail.o +137
NSLayoutConstraint+Extensions.o -136
ImageEncoding.o +136
AlertsRouter.o -133
CellActionView.o +131
ChatMessageInteractiveAttachmentView+ActionButton.o +127
SlideToCancelView.o -122
String+Extensions.o +120
AudioRecordingNameFormatter.o +120
ViewContainerBuilder.o -114
ImageAttachmentGalleryCell.o -112
InputChatMessageView.o +111
ChannelListSearchStrategy.o +98
ChatAvatarView.o +96
CellSeparatorView.o -96
ImageAttachmentComposerPreview.o +93
WaveformView.o -92
ZoomAnimator.o +91
ChatThreadVC+SwiftUI.o -90
ChatMessageHeaderDecoratorView.o +90
RecordButton.o -88
ChatChannelListLoadingView.o -88
GalleryCollectionViewCell.o -86
PollCreationOptionCell.o -85
SendButton.o -84
ChatThreadRepliesCountDecorationView.o +80
CloseButton.o -79
InputTextView.o -78
ChatChannelVC+SwiftUI.o +78
ImageProcessing.o +77
ChatMessageDefaultReactionsBubbleView.o +77
ArraySection.o +75
ChatThreadVC.o -74
ChatMessageBubbleView.o -74
ChatMessageReactions+Types.o +74
VoiceRecordingAttachmentViewInjector.o +72
PollCreationSectionHeaderView.o -72
ChatMessageVoiceRecordingAttachmentListView.o -72
ChatMessageCell.o +69
OnlyLinkTappableTextView.o -68
TextViewMentionedUsersHandler.o +68
VoiceRecordingAttachmentComposerPreview.o +68
ComposerLinkPreviewView.o -68
ChatMessageGiphyView+GiphyBadge.o +67
VideoLoading.o -65
MixedAttachmentViewInjector.o +64
OperationTask.o +63
UIImageView+SwiftyGif.o +63
LinkAttachmentViewInjector.o -62
CheckboxControl.o -61
ChatMessagePopupVC.o -59
ChatMessageReactionAuthorsFlowLayout.o -57
BaseViews.o +57
ChatMessageVoiceRecordingAttachmentListView+ItemViewPresenter.o +57
PollCreationMultipleVotesFeatureCell.o -55
GalleryAttachmentViewInjector.o +54
PollsConfig.o -52
PollFeature.o +48
GalleryVC.o +48
ChatChannelUnreadCountView.o +48
ImageDownloadRequest.o +42
DifferentiableSection.o -42

@sonarqubecloud
Copy link
Copy Markdown

@testableapple testableapple merged commit 5c6f196 into develop Jan 28, 2026
16 checks passed
@testableapple testableapple deleted the ci/buildable-folders branch January 28, 2026 20:57
testableapple added a commit that referenced this pull request Feb 12, 2026
* [CI] Convert Xcode groups to buildable folders (#3940)

* [CI] Delete unused test artifact (#3944)

* [CI] Resolve mock server compilation issue (#3946)

* [CI] Resolve target membership issues after migrating to buildable folders (#3949)

* Make the members and messages size in ChannelListQuery optional (#3951)

* Prevent adding back deleted reactions in case of client errors (#3956)

* Fix refreshing channel when setting push notification preference for the first time (#3954)

* Bump 4.97.1

* Update release version to snapshot

---------

Co-authored-by: Martin Mitrevski <martinmitrevski.oh@gmail.com>
Co-authored-by: Toomas Vahter <toomas.vahter@getstream.io>
Co-authored-by: Stream Bot <ci@getstream.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🤖 CI/CD Any work related to CI/CD

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants